Fwd: Hello and a Threading/External Server/Win32 question
Jay Sprenkle <[email protected]>
| Newsgroups | gmane.comp.web.fastcgi.devel |
|---|---|
| Message-ID | <[email protected]> |
---------- Forwarded message ---------- From: Jay Sprenkle <[email protected]> Date: Thu, Apr 16, 2009 at 4:28 PM Subject: Re: [FASTCGI] Hello and a Threading/External Server/Win32 question To: Shane Calimlim <[email protected]> I looked at this too and found the answer in cygwin. They duplicate a lot of the functionality of unix and have already been down this path. Here's the clue I found: http://www.mail-archive.com/[email protected]/msg62458.html I may be wrong but the short answer seems to be you can't pass open file handles that are tcp connections between processes because windows doesn't treat everything (tcp connections) as a file. I've not seen any way to get fastcgi to work on windows as the official specs specify (since you must pass more than a file handle between processes). If you get it to work I'd love to see how. If you use a named pipe on the other hand things get easier, and named pipes are supposed to be faster than tcp connections too. On Thu, Apr 16, 2009 at 3:59 PM, Shane Calimlim <[email protected]>wrote: > Hi, first let me say that I'm new to the list, but I've been using (and > loving) FastCGI for years -- great work everyone involved. > > I'm working on a FastCGI external server (using a port) with multiple > threads. The problem I'm having is that even with multiple threads, only > one request is being handled at a time. Multiple threads are handling them, > but FCGX_Accept_r() is locking until the previous request's FCGX_Finish_r() > is called. > > I am also using the Qt framework; in the code snippets below qDebug() is > just a debugging printf(). > > Here is the code I'm using: > > In main(): > > if( FCGX_Init() != 0 ) > { > qDebug( "FCGX_Init() error." ); > ::exit( 1 ); > } > g_listenSocket = FCGX_OpenSocket( ":9000", 100 ); > if( g_listenSocket < 0 ) > { > qDebug( "FCGX_OpenSocket() error." ); > ::exit( 1 ); > } > > //spawn threads and wait until they all terminate > > In each thread: > > FCGX_Request request; > if( FCGX_InitRequest( &request, g_listenSocket, 0 ) != 0 ) > { > qDebug( "FCGX_InitRequest() error." ); > ::exit( 1 ); > } > > int status; > for(;;) > { > status = FCGX_Accept_r( &request ); > if( status != 0 ) > { > qDebug( "FCGX_Accept_r() error." ); > ::exit( 1 ); > } > > FCGX_FPrintF( request.out, "Content-Type: text/plain\r\n\r\n" ); > FCGX_FPrintF( request.out, "Hello World!\n" ); > for( int i = 1; i <= 10; ++i ) > { > msleep( 1000 ); // this is a Qt function -- a 1 second sleep > FCGX_FPrintF( request.out, "%d\n", i ); > FCGX_FFlush( request.out ); > } > FCGX_Finish_r( &request ); > } > > I've tried various combinations with Init/OpenSocket being in each thread, > but have had no luck with those. I've also tried WSADuplicateSocket on > g_listenSocket, but Windows complains that it is not a socket. > > Is this possible at all? Is it possible on Windows? The target platform > is Linux, but I develop on Windows, so having it work identically on my dev > machines would be very useful. > > _______________________________________________ FastCGI-developers mailing list FastCGI-developers-xGejAJT2w6xVgU18Zptdi0EOCMrvLtNR@public.gmane.org http://mailman.pins.net/mailman/listinfo.cgi/fastcgi-developers