- my $length = shift;
- my $buffer = "";
- my $count = 0;
- # simply die if the client takes too long
- alarm 30;
- while ($length > length $buffer) {
- my ($data,$ret);
- do {
- $ret = sysread STDIN, $data, $length
- } while not defined $ret and ($! == EINTR or $! == EAGAIN);
- fail "read: $!" unless defined $ret;
- fail "short read: expected $length bytes, got $count" if $ret == 0;
- $buffer .= $data;
- $count += $ret;
+ my $length = shift; $_ = "";
+ while ($length > length) {
+ my $ret = sysread STDIN, $_, $length, length;
+ fail "Expected $length bytes, got ".length
+ if defined $ret and $ret == 0;
+ fail "read: $!" if not defined $ret and $! != EINTR and $! != EAGAIN;