I came up with code that just works for me on Windows:
int main ()
{
char **initialEnv = environ;
int count = 0;
int listenSocket;
OS_LibInit(NULL);
listenSocket = FCGX_OpenSocket("localhost:9000", 5);
if (listenSocket < 0) {
exit(1);
}
FCGX_Request request;
FCGX_Init();
FCGX_InitRequest(&request, listenSocket, 0);
while (FCGX_Accept_r(&request) >= 0) {
FCGI_stdin->stdio_stream = NULL;
FCGI_stdin->fcgx_stream = request.in;
FCGI_stdout->stdio_stream = NULL;
FCGI_stdout->fcgx_stream = request.out;
FCGI_stderr->stdio_stream = NULL;
FCGI_stderr->fcgx_stream = request.err;
environ = request.envp;
char *contentLength = getenv("CONTENT_LENGTH");
int len;
printf("Content-type: text/html\r\n"
"\r\n"
"<title>FastCGI echo</title>"
"<h1>FastCGI echo</h1>\n"
"Request number %d, Process ID: %d<p>\n", ++count, getpid());
if (contentLength != NULL) {
len = strtol(contentLength, NULL, 10);
} else {
len = 0;
}
if (len <= 0) {
printf("No data from standard input.<p>\n");
}
else {
int i, ch;
printf("Standard input:<br>\n<pre>\n");
for (i = 0; i < len; i++) {
if ((ch = getchar()) < 0) {
printf("Error: Not enough bytes received on standard input<p>\n");
break;
}
putchar(ch);
}
printf("\n</pre><p>\n");
}
}
return 0;
}
source
share