Created
July 3, 2014 11:14
-
-
Save dermesser/e2f9b66457ae19ebd116 to your computer and use it in GitHub Desktop.
In case anyone wants to see a multi-threaded FastCGI application written with the fcgiapp library.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# include <stdlib.h> | |
# include <stdio.h> | |
# include <sys/stat.h> | |
# include <pthread.h> | |
# include <fcgiapp.h> | |
const char* const sockpath = "/tmp/fcgicpp.sock"; | |
void* start_fcgi_worker(void* arg); | |
struct FCGI_Info | |
{ | |
int fcgi_fd; | |
}; | |
int main(void) | |
{ | |
int fcgifd = FCGX_OpenSocket(sockpath,128); | |
chmod(sockpath,0777); | |
if ( 0 > fcgifd ) | |
{ | |
printf("Error opening socket\n"); | |
exit(1); | |
} | |
/* | |
if ( FCGX_IsCGI() ) | |
{ | |
printf("Please run this process as FastCGI process.\n"); | |
exit(1); | |
} | |
*/ | |
const unsigned int n_threads = 4; | |
pthread_t threads[n_threads]; | |
struct FCGI_Info info; | |
info.fcgi_fd = fcgifd; | |
for ( unsigned int i = 0; i < n_threads; i++ ) | |
{ | |
pthread_create(&threads[i],NULL,start_fcgi_worker,(void*)&info); | |
} | |
// Wait indefinitely | |
for ( unsigned int i = 0; i < n_threads; i++ ) | |
{ | |
pthread_join(threads[i],NULL); | |
} | |
return 0; | |
} | |
void* start_fcgi_worker(void* arg) | |
{ | |
struct FCGI_Info* info = (struct FCGI_Info*)arg; | |
FCGX_Init(); | |
FCGX_Request request; | |
FCGX_InitRequest(&request,info->fcgi_fd,0); | |
while ( 1 ) | |
{ | |
FCGX_Accept_r(&request); | |
FCGX_PutStr("Content-type: text/plain\r\n\r\n",28,request.out); | |
FCGX_PutStr("Hey!\n",5,request.out); | |
FCGX_Finish_r(&request); | |
} | |
} |
Thank you all for your comments! They are really helpful :)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Locking around calls to FCGX_Accept_r seem unnecessary. The header file says "(multi-thread safe)".