package OpenResty::FastCGI; our $VERSION='1.07'; # SKIP use FCGI; use base 'CGI::Simple'; # workaround for known bug in libfcgi while (($ignore) = each %ENV) { } # override the initialization behavior so that # state is NOT maintained between invocations sub save_request { # no-op } # If ENV{FCGI_SOCKET_PATH} is specified, we maintain a FCGI Request handle # in this package variable. use vars qw($Ext_Request); BEGIN { # If ENV{FCGI_SOCKET_PATH} is given, explicitly open the socket, # and keep the request handle around from which to call Accept(). if ($ENV{FCGI_SOCKET_PATH}) { my $path = $ENV{FCGI_SOCKET_PATH}; my $backlog = $ENV{FCGI_LISTEN_QUEUE} || 100; my $socket = FCGI::OpenSocket( $path, $backlog ); $Ext_Request = FCGI::Request( \*STDIN, \*STDOUT, \*STDERR, \%ENV, $socket, 1 ); } } # New is slightly different in that it calls FCGI's # accept() method. sub new { my ($self, $initializer, @param) = @_; unless (defined $initializer) { if ($Ext_Request) { return undef unless $Ext_Request->Accept() >= 0; } else { return undef unless FCGI::accept() >= 0; } } return $CGI::Q = $self->SUPER::new($initializer, @param); } # to work around an IPC::Run issue... *FCGI::Stream::FILENO = sub { 1; }; 1;