use IO::Select; my $s = IO::Select->new($socket); while (not $done) { my @socks = $s->can_read($timeout); if (@socks) { read_socket(); whatever(); } else { close_process(); } }