Код:

#!/usr/bin/perl -w
use strict;
use IO::Socket;
use IO::Select;
use constant LBUFF => 2048;
$|=1;
my($pid,@read,$buffer,$fh,$count);
my $port = shift || 45012;
$SIG{'ALRM'} = sub { exit(1); };
my $socket = IO::Socket::INET->new(LocalPort => $port,
Listen => 5,
ReuseAddr => 1,
Proto => 'tcp',
Timeout => 30);
print "Listen ".$socket->sockhost.":".$socket->sockport."\n";
my $session=$socket->accept || die("$!");
syswrite(STDOUT,"to: ".$session->sockhost.":".$session->sockport. " from: ".$session->peerhost.":".$session->peerport."\n");
my $s=IO::Select->new() || die("Can't create Select obj : $!");
$s->add(\*STDIN);
$s->add($session);
STDIN->blocking(0);
$session->blocking(0);
while(1){
@read=$s->can_read();
foreach $fh(@read){
if($fh == \*STDIN){
while(my $count=sysread(STDIN,$buffer,LBUFF)){
# syswrite(STDOUT,"STDIN\n");
syswrite($session,$buffer);
}
}
if($fh == $session){
while($count=sysread($session,$buffer,LBUFF)){
syswrite(STDOUT,$count."\n");
syswrite(STDOUT,$buffer);
unless(defined($count) && length($buffer)){
$s->remove($session);
$session->shutdown(2);
exit(1);
}
}
}
syswrite(STDOUT,"EXIT\n");
}
}
Как отловить закрытие сокета другой стороной, Участок кода
Код:

unless(defined($count) && length($buffer)){
$s->remove($session);
$session->shutdown(2);
exit(1);
}
Как я понимаю должен это делать но ничего не работает, посоветуйте как исправить
