#!/usr/bin/perl
$|++;
use IO::Socket;
use IO::Select;
my $lsn = IO::Socket::INET->new(
Listen => 10,
LocalAddr => 'localhost',
LocalPort => 9000
);
my $client = new IO::Select( $lsn );
while( my @ready = $client->can_read ) {
for my $fh (@ready) {
if($fh == $lsn) {
warn "Accepted new socket\n";
my $new = $lsn->accept;
$client->add($new);
}
else {
# process socket
sysread($fh, $_, 1 );
print; # NB syswrite(STDOUT,$_,1) will be unbuffered by
+default
}
}
}
Note that sysread bypasses STDIO and all buffering. Read will sort of buffer (newlines only in this one byte reading config). I never use recv so really have NFI what it does.
|