sub readn #returns scalar with <= $bytes requested { my ($socket, $bytes ) = @_; my $offset = 0; my $buf = ""; my $nread = -1; while ($offset < $bytes and $nread) # $nread==0 means EOF { my $nleft = $bytes-$offset; $nread = sysread($socket, $buf, $nleft, $offset); $offset += $nread; } return $buf; }