A more robust (and portable) approach is to perform a 'select' call on the socket handle with a 60 second timeout. That way
you don't have to worry about any signal nastiness.
Either use IO::Select or the second form from perldoc -f select
It's also much simpler. Why didn't I think of that?
use IO::Select ();
sub socket_read {
my $sel = IO::Select->new($socket);
while (!$sel->can_read(60)) {
print STDERR "Received alarm\n";
}
my $len = $socket->sysread($line, 1024);
...
}