Merge my 0.74 release with catagits/master
Florian Ragwitz [Fri, 10 Feb 2012 15:35:32 +0000 (16:35 +0100)]
* catagits/master:
  Correct POD paragraph Reported by gregor herrmann <gregoa@debian.org>
  Port eg/threaded.pl to ithreads
  Correct mutual exclusion with ithreads
  Require Perl 5.6 and use XSLoader
  Moved examples to eg/
  Removed unused version.pm file
  Removed POD file documenting removed API
  Removed genereating of FCGI.pm
  Removed genereating of FCGI.xs
  Removed broken PP implementation.
  Remove deprecated API

Conflicts:
perl/version.pm

1  2 
perl/FCGI.pm

diff --cc perl/FCGI.pm
index 0000000,32c64cb..3279a13
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,256 +1,256 @@@
+ package FCGI;
+ use strict;
+ BEGIN {
 -    our $VERSION = '0.73';
++    our $VERSION = '0.74';
+     require XSLoader;
+     XSLoader::load(__PACKAGE__, $VERSION);
+ }
+ sub FAIL_ACCEPT_ON_INTR () { 1 };
+ sub Request(;***$*$) {
+     my @defaults = (\*STDIN, \*STDOUT, \*STDERR, \%ENV, 0, FAIL_ACCEPT_ON_INTR);
+     $_[4] = fileno($_[4]) if defined($_[4]) && defined(fileno($_[4]));
+     splice @defaults,0,@_,@_;
+     &RequestX(@defaults);
+ }
+ package FCGI::Stream;
+ use strict;
+ sub PRINTF {
+   shift->PRINT(sprintf(shift, @_));
+ }
+ sub BINMODE {
+ }
+ sub READLINE {
+     my $stream = shift;
+     my ($s, $c);
+     my $rs = $/ eq '' ? "\n\n" : $/;
+     my $l = substr $rs, -1;
+     my $len = length $rs;
+     $c = $stream->GETC();
+     if ($/ eq '') {
+         while ($c eq "\n") {
+             $c = $stream->GETC();
+         }
+     }
+     while (defined $c) {
+         $s .= $c;
+         last if $c eq $l and substr($s, -$len) eq $rs;
+         $c = $stream->GETC();
+     }
+     $s;
+ }
+ sub OPEN {
+     $_[0]->CLOSE;
+     if (@_ == 2) {
+         return open($_[0], $_[1]);
+     } else {
+         my $rc;
+         eval("$rc = open($_[0], $_[1], $_[2])");
+         die $@ if $@;
+         return $rc;
+     }
+ }
+ # Some things (e.g. IPC::Run) use fileno to determine if a filehandle is open,
+ # so we return a defined, but meaningless value. (-1 being the error return
+ # value from the syscall in c, meaning it can never be a valid fd no)
+ # Probably a better alternative would be to return the fcgi stream fd.
+ sub FILENO { -1 }
+ 1;
+ =pod
+ =head1 NAME
+ FCGI - Fast CGI module
+ =head1 SYNOPSIS
+     use FCGI;
+     my $count = 0;
+     my $request = FCGI::Request();
+     while($request->Accept() >= 0) {
+         print("Content-type: text/html\r\n\r\n", ++$count);
+     }
+ =head1 DESCRIPTION
+ Functions:
+ =over 4
+ =item FCGI::Request
+ Creates a request handle. It has the following optional parameters:
+ =over 8
+ =item input perl file handle (default: \*STDIN)
+ =item output perl file handle (default: \*STDOUT)
+ =item error perl file handle (default: \*STDERR)
+ These filehandles will be setup to act as input/output/error
+ on successful Accept.
+ =item environment hash reference (default: \%ENV)
+ The hash will be populated with the environment.
+ =item socket (default: 0)
+ Socket to communicate with the server.
+ Can be the result of the OpenSocket function.
+ For the moment, it's the file descriptor of the socket
+ that should be passed. This may change in the future.
+ You should only use your own socket if your program
+ is not started by a process manager such as mod_fastcgi
+ (except for the FastCgiExternalServer case) or cgi-fcgi.
+ If you use the option, you have to let your FastCGI
+ server know which port (and possibly server) your program
+ is listening on.
+ See remote.pl for an example.
+ =item flags (default: 0)
+ Possible values:
+ =over 12
+ =item FCGI::FAIL_ACCEPT_ON_INTR
+ If set, Accept will fail if interrupted.
+ It not set, it will just keep on waiting.
+ =back
+ =back
+ Example usage:
+     my $req = FCGI::Request;
+ or:
+     my %env;
+     my $in = new IO::Handle;
+     my $out = new IO::Handle;
+     my $err = new IO::Handle;
+     my $req = FCGI::Request($in, $out, $err, \%env);
+ =item FCGI::OpenSocket(path, backlog)
+ Creates a socket suitable to use as an argument to Request.
+ =over 8
+ =item path
+ Pathname of socket or colon followed by local tcp port.
+ Note that some systems take file permissions into account
+ on Unix domain sockets, so you'll have to make sure that
+ the server can write to the created file, by changing
+ the umask before the call and/or changing permissions and/or
+ group of the file afterwards.
+ =item backlog
+ Maximum length of the queue of pending connections.
+ If a connection
+ request arrives with the queue full the client may receive
+ an  error  with  an  indication of ECONNREFUSED.
+ =back
+ =item FCGI::CloseSocket(socket)
+ Close a socket opened with OpenSocket.
+ =item $req->Accept()
+ Accepts a connection on $req, attaching the filehandles and
+ populating the environment hash.
+ Returns 0 on success.
+ If a connection has been accepted before, the old
+ one will be finished first.
+ Note that unlike with the old interface, no die and warn
+ handlers are installed by default. This means that if
+ you are not running an sfio enabled perl, any warn or
+ die message will not end up in the server's log by default.
+ It is advised you set up die and warn handlers yourself.
+ FCGI.pm contains an example of die and warn handlers.
+ =item $req->Finish()
+ Finishes accepted connection.
+ Also detaches filehandles.
+ =item $req->Flush()
+ Flushes accepted connection.
+ =item $req->Detach()
+ Temporarily detaches filehandles on an accepted connection.
+ =item $req->Attach()
+ Re-attaches filehandles on an accepted connection.
+ =item $req->LastCall()
+ Tells the library not to accept any more requests on this handle.
+ It should be safe to call this method from signal handlers.
+ Note that this method is still experimental and everything
+ about it, including its name, is subject to change.
+ =item $env = $req->GetEnvironment()
+ Returns the environment parameter passed to FCGI::Request.
+ =item ($in, $out, $err) = $req->GetHandles()
+ Returns the file handle parameters passed to FCGI::Request.
+ =item $isfcgi = $req->IsFastCGI()
+ Returns whether or not the program was run as a FastCGI.
+ =back
+ =head1 LIMITATIONS
+ FCGI.pm isn't Unicode aware, only characters within the range 0x00-0xFF are 
+ supported. Attempts to output strings containing characters above 0xFF results
+ in a exception: (F) C<Wide character in %s>.
+ Users who wants the previous (FCGI.pm <= 0.68) incorrect behavior can disable the
+ exception by using the C<bytes> pragma.
+     {
+         use bytes;
+         print "\x{263A}";
+     }
+ =head1 AUTHOR
+ Sven Verdoolaege <skimo@kotnet.org>
+ =cut
+ __END__