Read/Write IO on socket file descriptor

  • Thread starter Patrick LeBoutillier
  • Start date
P

Patrick LeBoutillier

Hi all,

I'm trying to perform read and write I/O on a socket file descriptor
received for another process via a Unix Domain Socket. In trying to
understand all this I came up with a small test script that is not
working for me:


use strict ;
use IO::Socket::INET ;

my $socket = new IO::Socket::INET(
PeerAddr => 'www.perl.com',
PeerPort => 80,
Proto => 'tcp',
) ;

my $rfd = fileno($socket) ;
my $rfh = new IO::Handle->fdopen($rfd, "r") ;
my $wfd = fileno($socket) ;
my $wfh = new IO::Handle->fdopen($wfd, "w") ;

print "$rfd $rfh $wfd $wfh\n" ;
print $wfh "GET / HTTP/1.0\n\n" ;
print "Sent GET...\n" ;
my $line = <$rfh> ;
print $line ;


Should this work? It seems as though printing to $wfh
does nothing, and then the <$rfh> is hanging.

If this is not the way to go about this, what else can I do
to perform read AND write I/O on a socket file descriptor?

I'm using Perl 5.6.1 on Linux RH 7.1

Thanks,

Patrick LeBoutillier
 
A

A. Sinan Unur

(e-mail address removed) (Patrick LeBoutillier) wrote in
Hi all,

I'm trying to perform read and write I/O on a socket file descriptor
received for another process via a Unix Domain Socket. In trying to
understand all this I came up with a small test script that is not
working for me:

I am no expert so please take what I say with a grain of salt.
use strict ;
use IO::Socket::INET ;

my $socket = new IO::Socket::INET(
PeerAddr => 'www.perl.com',
PeerPort => 80,
Proto => 'tcp',
) ;

my $rfd = fileno($socket) ;
my $rfh = new IO::Handle->fdopen($rfd, "r") ;
my $wfd = fileno($socket) ;
my $wfh = new IO::Handle->fdopen($wfd, "w") ;
$wfh->autoflush(1);

print "$rfd $rfh $wfd $wfh\n" ;
print $wfh "GET / HTTP/1.0\n\n" ;
print "Sent GET...\n" ;
my $line = <$rfh> ;
print $line ;


Also, I am not sure why you are creating $rfh and $wfh. $socket can be read
from and written to using regular Perl syntax:

#! C:/Perl/bin/perl.exe

use strict;
use warnings;

use IO::Socket::INET;

my $socket = new IO::Socket::INET(
PeerAddr => 'www.perl.com',
PeerPort => 80,
Proto => 'tcp');

die "Cannot open connection: $!\n" unless $socket;

print $socket "GET / HTTP/1.0\n\n";
print "Sent GET...\n";
my $line = <$socket>;
close $socket;

print $line, "\n";

__END__

Sinan.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,482
Members
44,900
Latest member
Nell636132

Latest Threads

Top