forking

Andrew Savige (andrew.savige@sb.com.au)
Wed, 23 Oct 1996 13:47:37 +1000

Message-Id: <2.2.32.19961023034737.0067dad0@sb.com.au>
Date: Wed, 23 Oct 1996 13:47:37 +1000
To: fastcgi-developers@openmarket.com
From: Andrew Savige <andrew.savige@sb.com.au>
Subject: forking

As will soon become obvious, I am new to fast-cgi.

I am manually starting a remote 'responder' process on
host 'knob', say, with something like:
   cgi-fcgi -start -connect :9992 /fred/responder
and I'm connecting to it from within a cgi script on
host 'fred', say, with:
   cgi-fcgi -bind -connect knob:9992

With the responder consisting of a simple FCGI_Accept()
loop, I got everything working fine.

Then I got a little more ambitious and fell down a hole.

What I am trying to do is to have responder immediately
fork a new process to handle the (possibly lengthy) request,
then wait for the next request and so on.  Is fast-cgi
designed to work this way?  If not, what is the recommended
way of writing a remote responder?

To give you a more precise idea of what I am doing, here
is a rough map of the responder code;

   while (FCGI_Accept() >= 0) {
      if ((pid = fork()) < 0) {
         error
      } else if (pid == 0) {
         /* child */
         printf("Content-type: text/plain\r\n\r\n");
         printf("this is a test\n");
         sleep(2);  /* simulate a lengthy request */
         FCGI_Finish();
         exit(0);
      }
      /* parent continues */
   }

The child's response works, but the parent then exits
the FCGI_Accept() loop (maybe FCGI_Accept() also calls
FCGX_Finish() and that causes a problem?).

Please help.

-- Andrew
Andrew Savige        andrews@sb.com.au