sub socket_read { my $len; { eval { local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required alarm 60; $len = $socket->sysread($line, 1024); }; alarm 0; if (my $e = $@) { if ($e eq "alarm\n") { print STDERR "Received alarm\n"; redo; } die($e); } } ... }