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);
}
Example #3
0
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);
}