struct request_info *VARARGS(request_set, struct request_info *, request) { struct request_info *r; va_list ap; VASTART(ap, struct request_info *, request); r = request_fill(request, ap); VAEND(ap); return (r); }
struct request_info *VARARGS(request_init, struct request_info *, request) { static struct request_info default_info; struct request_info *r; va_list ap; /* * Initialize data members. We do not assign default function pointer * members, to avoid pulling in the whole socket module when it is not * really needed. */ VASTART(ap, struct request_info *, request); *request = default_info; request->fd = -1; (void)strlcpy(request->daemon, unknown, sizeof(request->daemon)); (void)snprintf(request->pid, sizeof(request->pid), "%d", getpid()); request->client->request = request; request->server->request = request; r = request_fill(request, ap); VAEND(ap); return (r); }
int main(void) { unsigned int count = 0; int socket_fdescriptor = 0; char *buf = NULL; FCGX_Request request; Request_t req; // Initialize all the elements of the structures to NULL memset(&request, 0, sizeof(FCGX_Request) ); memset(&req, 0, sizeof(Request_t) ); if ( FCGX_Init() != 0 ) { return (1); } socket_fdescriptor = FCGX_OpenSocket(PORT_FCGI, 500); if ( socket_fdescriptor < 0 ) { return (2); } buf = (char *) malloc(50 * sizeof(char) ); sprintf(buf, "The file descriptor of the socket is : %d", socket_fdescriptor); logger("main.c", buf); if ( buf ) { free(buf); } if ( FCGX_InitRequest(&request, socket_fdescriptor, 0) < 0 ) { return (3); } /* Response loop. */ while ( FCGX_Accept_r(&request) == 0 ) { request_fill(request, &req); request_display(req, ++count); FCGX_FPrintF(request.out, "Content-type: text/html\r\n" "\r\n" "<title>FastCGI Hello! (C, fcgi_stdio library)</title>" "<h1>FastCGI Hello! (C, fcgi_stdio library)</h1>" "Request number %d", count); FCGX_Finish_r(&request); } fprintf(stderr, "Error FCGX_Accept_r"); return (0); }