8 XSLoader::load(__PACKAGE__, $VERSION);
11 sub FAIL_ACCEPT_ON_INTR () { 1 };
13 sub Request(;***$*$) {
14 my @defaults = (\*STDIN, \*STDOUT, \*STDERR, \%ENV, 0, FAIL_ACCEPT_ON_INTR);
15 $_[4] = fileno($_[4]) if defined($_[4]) && defined(fileno($_[4]));
16 splice @defaults,0,@_,@_;
24 shift->PRINT(sprintf(shift, @_));
33 my $rs = $/ eq '' ? "\n\n" : $/;
34 my $l = substr $rs, -1;
45 last if $c eq $l and substr($s, -$len) eq $rs;
53 Carp::croak(q/Operation 'OPEN' not supported on FCGI::Stream handle/);
58 Carp::croak(q/Operation 'SEEK' not supported on FCGI::Stream handle/);
63 Carp::croak(q/Operation 'TELL' not supported on FCGI::Stream handle/);
68 Carp::croak(q/Operation 'TIEHANDLE' not supported on FCGI::Stream handle/);
71 # Some things (e.g. IPC::Run) use fileno to determine if a filehandle is open,
72 # so we return a defined, but meaningless value. (-1 being the error return
73 # value from the syscall in c, meaning it can never be a valid fd no)
74 # Probably a better alternative would be to return the fcgi stream fd.
83 FCGI - Fast CGI module
90 my $request = FCGI::Request();
92 while($request->Accept() >= 0) {
93 print("Content-type: text/html\r\n\r\n", ++$count);
104 Creates a request handle. It has the following optional parameters:
108 =item input perl file handle (default: \*STDIN)
110 =item output perl file handle (default: \*STDOUT)
112 =item error perl file handle (default: \*STDERR)
114 These filehandles will be setup to act as input/output/error
115 on successful Accept.
117 =item environment hash reference (default: \%ENV)
119 The hash will be populated with the environment.
121 =item socket (default: 0)
123 Socket to communicate with the server.
124 Can be the result of the OpenSocket function.
125 For the moment, it's the file descriptor of the socket
126 that should be passed. This may change in the future.
128 You should only use your own socket if your program
129 is not started by a process manager such as mod_fastcgi
130 (except for the FastCgiExternalServer case) or cgi-fcgi.
131 If you use the option, you have to let your FastCGI
132 server know which port (and possibly server) your program
134 See remote.pl for an example.
136 =item flags (default: 0)
142 =item FCGI::FAIL_ACCEPT_ON_INTR
144 If set, Accept will fail if interrupted.
145 It not set, it will just keep on waiting.
152 my $req = FCGI::Request;
156 my $in = new IO::Handle;
157 my $out = new IO::Handle;
158 my $err = new IO::Handle;
159 my $req = FCGI::Request($in, $out, $err, \%env);
161 =item FCGI::OpenSocket(path, backlog)
163 Creates a socket suitable to use as an argument to Request.
169 Pathname of socket or colon followed by local tcp port.
170 Note that some systems take file permissions into account
171 on Unix domain sockets, so you'll have to make sure that
172 the server can write to the created file, by changing
173 the umask before the call and/or changing permissions and/or
174 group of the file afterwards.
178 Maximum length of the queue of pending connections.
180 request arrives with the queue full the client may receive
181 an error with an indication of ECONNREFUSED.
185 =item FCGI::CloseSocket(socket)
187 Close a socket opened with OpenSocket.
191 Accepts a connection on $req, attaching the filehandles and
192 populating the environment hash.
193 Returns 0 on success.
194 If a connection has been accepted before, the old
195 one will be finished first.
197 Note that unlike with the old interface, no die and warn
198 handlers are installed by default. This means that if
199 you are not running an sfio enabled perl, any warn or
200 die message will not end up in the server's log by default.
201 It is advised you set up die and warn handlers yourself.
202 FCGI.pm contains an example of die and warn handlers.
206 Finishes accepted connection.
207 Also detaches filehandles.
211 Flushes accepted connection.
215 Temporarily detaches filehandles on an accepted connection.
219 Re-attaches filehandles on an accepted connection.
221 =item $req->LastCall()
223 Tells the library not to accept any more requests on this handle.
224 It should be safe to call this method from signal handlers.
226 Note that this method is still experimental and everything
227 about it, including its name, is subject to change.
229 =item $env = $req->GetEnvironment()
231 Returns the environment parameter passed to FCGI::Request.
233 =item ($in, $out, $err) = $req->GetHandles()
235 Returns the file handle parameters passed to FCGI::Request.
237 =item $isfcgi = $req->IsFastCGI()
239 Returns whether or not the program was run as a FastCGI.
245 FCGI.pm isn't Unicode aware, only characters within the range 0x00-0xFF are
246 supported. Attempts to output strings containing characters above 0xFF results
247 in a exception: (F) C<Wide character in %s>.
249 Users who wants the previous (FCGI.pm <= 0.68) incorrect behavior can disable the
250 exception by using the C<bytes> pragma.
260 Sven Verdoolaege <skimo@kotnet.org>