- return if !defined($r) && $! == EAGAIN || $! == EINTR;
-
- # $r may be undef, here:
- $n += $r if $r;
- $ret = $parse_hdr->($r ? $n : $r, \$buf);
+ if (defined($r)) {
+ $total_rd += $r;
+ $ret = $parse_hdr->($r ? $total_rd : 0, \$buf);
+ } else {
+ # caller should notify us when it's ready:
+ return if $! == EAGAIN;
+ next if $! == EINTR; # immediate retry
+ log_err($env, "error reading header: $!");
+ $ret = [ 500, [], [ "Internal error\n" ] ];
+ }