server.pl: use IO::Socket; use strict; my $server = new IO::Socket::INET(Timeout => 7200, Proto => "tcp", LocalPort => 3000, LocalHost => "localhost", Reuse => 1, Listen => 2); print "Server is listening for connection ...\n"; my $c = $server->accept; print "Connection accepted, now sleep 10 seconds ...\n"; sleep(10); close $c; print "Connection closed\n"; client.pl: use IO::Socket; use IO::Select; use strict; my $c = new IO::Socket::INET(Proto => "tcp", PeerAddr => "localhost", PeerPort => 3000, Timeout => 7200) || die "failed to connect to server\n"; print "Connected, $c\n"; my $sel = new IO::Select($c); while (1) { print "tick ...\n"; my @r = $sel->can_read(0); foreach (@r) { my $line = <$_>; print "$_ is closed\n" if (!defined($line)); } sleep(1); }