gabaux has asked for the wisdom of the Perl Monks concerning the following question:

High Fellow Monks!

I am to write a perl tool to test an own Apache module. I have some mysterious problems with low-level socket.

socket(SOCK, PF_INET, SOCK_STREAM, $proto) || die "socket: $!"; connect(SOCK, $paddr) || die "connect: $!"; print "Host reached\n-----------------\n" ;

The connections is ok! Next comes the problem:

send SOCK, "$lines\n",MSG_OOB ; $res = recv SOCK, $line,1024,MSG_OOB ; while ( defined($res) ) { print $line ; $res = recv SOCK, $line,1024,MSG_OOB ; } print "Closed\n" ; close SOCK ;

The message is correctly submittet to the Apache server, I could check it from the acces-log and the error-log. (The last shows that our module correctly processed the incoming data.) The socket seems to close down BEFORE Apache could send back the reply....

Any ideas?


Replies are listed 'Best First'.
Re: Low level socket question.
by crouchingpenguin (Priest) on Jun 25, 2003 at 12:05 UTC

    How about just using IO::Socket?

    #!/usr/bin/perl $|++; use strict; use warnings; use IO::Socket; my $host = ''; my $port = 80; my $socket = IO::Socket::INET->new( PeerHost => $host, PeerPort => $port, Timeout => 5, ) or die "Failed to connect to $host on $port: $!"; $socket->autoflush(1); print "Host reached\n-----------------\n" ; my $lines = 'GET /index.html'; $socket->send($lines . "\n"); while( defined( my $line = $socket->getline() ) ){ print $line; }

    "Never be afraid to try something new. Remember, amateurs built the ark. Professionals built the Titanic."
Re: Low level socket question.
by zby (Vicar) on Jun 25, 2003 at 11:01 UTC
    Don't know if this will help but, you could check the $! after the recv call.