cgi-fcgi is a CGI/1.1 program that communicates with an already-running FastCGI application in order to
respond to an HTTP request. cgi-fcgi is also capable of starting a FastCGI application.
When you invoke cgi-fcgi as
cgi-fcgi -f cmdPath
then cgi-fcgi opens the file at cmdPath and reads its arguments from that file. cgi-fcgi will skip lines
that begin with the comment character #. The first non-comment line should contain valid arguments in
one of the other three forms.
The -f form of cgi-fcgi is designed for Unix systems whose exec(2) family of system calls supports the
execution of command interpreter files. For instance, if a file with execute permission contains the
text
#! /bin/cgi-fcgi -f
-connect /httpd/root/sock/app /httpd/root/bin/app
the effect is the same as executing
/usr/bin/cgi-fcgi -connect /httpd/root/sock/app /httpd/root/bin/app
When you invoke cgi-fcgi as
cgi-fcgi -bind -connect connName
the connName argument is either the path name of a Unix domain listening socket or a host:port pair. If
connName contains a colon, it is assumed to be host:port. cgi-fcgi performs a connect(2) using connName.
If the connect succeeds, cgi-fcgi forwards the CGI environment variables and stdin data to the FastCGI
application, and forwards the stdout and stderr data from the application to cgi-fcgi's stdout (most
likely connected to a Web server). When the FastCGI application signals the end of its response, cgi-
fcgi flushes its buffers and exits, and the Web server completes the http response.
When you invoke cgi-fcgi as
cgi-fcgi -start -connect connName appPath [nServers]
then cgi-fcgi performs the function of starting one or more FastCGI application processes. The connName
argument specifies either the path name of the Unix domain listening socket that cgi-fcgi will create, or
is "localhost:NNN" where NNN is the port number of the TCP/IP listening socket that cgi-fcgi will create
on the local machine. (cgi-fcgi will not create processes on remote machines.) After cgi-fcgi creates
the listening socket, it forks nServers copies of a process running the executable file appPath. If
nServers is omitted, the effect is as if the value "1" had been specified. The processes share the
single listening socket.
When you invoke cgi-fcgi as
cgi-fcgi -connect connName appPath [nServers]
cgi-fcgi performs -bind and then, if necssary, performs -start and repeats the -bind. That is, cgi-fcgi
first operates as if the command had been
cgi-fcgi -bind -connect connName
If the connect fails, cgi-fcgi tries
cgi-fcgi -start -connect connName appPath [nServers]
and finally retries
cgi-fcgi -bind -connect connName
In this form, cgi-fcgi does not support TCP/IP connections.