};
my $readdata = sub {
- my ($fh) = @_;
+ my ($fh, $allow_eof) = @_;
my $head = '';
while (length($head) < 5) {
last if !sysread $fh, $head, 5 - length($head), length($head);
}
+ return undef if $allow_eof && length($head) == 0;
+
die "partial read\n" if length($head) < 5;
my ($cmd, $len) = unpack "a L", $head;
$self->{conn} = $conn;
for (;;) {
- my ($cmd, $data) = &$readdata($parent);
+ my ($cmd, $data) = &$readdata($parent, 1);
- last if $cmd eq 'Q';
+ last if !$cmd || $cmd eq 'Q';
my $res;
eval {