sub readn { my ($socket, $bytes ) = @_; my $offset = 0; my $buf = ""; while ($offset < $bytes) { my $nread; my $nleft = $bytes-$offset; $nread = sysread($socket,$buf,$nleft,$offset); ## undef is like the -1 C return kill 'USR1',$$ unless (defined $nread); last if ($nread ==0); ## EOF $offset += $nread; } return $buf; }