Search code examples
perlsocketsfastcgi

I want to get a client socket using FCGI.pm


I have this code:

#!/usr/bin/perl
use strict;
use warnings;
use FCGI;

my $socket = FCGI::OpenSocket(":9000", 5);
my $request = FCGI::Request(\*STDIN, \*STDOUT, \*STDERR, \%ENV, $socket);
my $count = 1;

while($request->Accept() >= 0) {

    print "Content-Type: text/html; charset=UTF-8\r\n\r\n";
    print $count++, "<br />";

}

I need to get the client socket created after accept. How could I do that?


Solution

  • I solved this problem.

    #!/usr/bin/perl  
    use strict;
    use warnings;
    use FCGI;
    use Socket;
    
    my $socket = FCGI::OpenSocket(":9000", 5);
    my $request = FCGI::Request(\*STDIN, \*STDOUT, \*STDERR, \%ENV, $socket);
    my $count = 1;
    while($request->Accept() >= 0) {
    
        print "Content-Type: text/html; charset=UTF-8\r\n\r\n";
        print $count++, "<br />";
        print "$$<br />";
        open(my $client, "+>&4") or die "$!";
    
        my $mysockaddr = getsockname($client) or die "$!";
        my ($myport, $myaddr) = sockaddr_in($mysockaddr);
        print $myport, ":", inet_ntoa($myaddr), "<br />";
        my $peersockaddr = getpeername($client) or die "$!";
        my ($peerport, $peeraddr) = sockaddr_in($peersockaddr);
        print $peerport, ":", inet_ntoa($peeraddr), "<br />";
    
        close $client;
    }