lib/PublicInbox/HTTPD/Async.pm | 3 ++- t/spawn.t | 5 +++++ diff --git a/lib/PublicInbox/HTTPD/Async.pm b/lib/PublicInbox/HTTPD/Async.pm index bd1fd8faf2c1ea49569a702a16c75407ffd4220e..1de9501d18c43528e4ce634458b394d089d6eb41 100644 --- a/lib/PublicInbox/HTTPD/Async.pm +++ b/lib/PublicInbox/HTTPD/Async.pm @@ -37,7 +37,8 @@ cb => $cb, # initial read callback arg => $arg, # arg for $cb end_obj => $end_obj, # like END{}, can ->event_step }, $class; - IO::Handle::blocking($io, 0); + my $pp = tied *$io; + $pp->{fh}->blocking(0) // die "$io->blocking(0): $!"; $self->SUPER::new($io, EPOLLIN | EPOLLET); } diff --git a/t/spawn.t b/t/spawn.t index 0eed79bbbb5802343717a4590ab2e79406c9ccd6..6f811ec163df75fab559a2c119b723daad23f27f 100644 --- a/t/spawn.t +++ b/t/spawn.t @@ -77,6 +77,11 @@ { my $fh = popen_rd([qw(printf foo\nbar)]); ok(fileno($fh) >= 0, 'tied fileno works'); + my $tfh = (tied *$fh)->{fh}; + is($tfh->blocking(0), 1, '->blocking was true'); + is($tfh->blocking, 0, '->blocking is false'); + is($tfh->blocking(1), 0, '->blocking was true'); + is($tfh->blocking, 1, '->blocking is true'); my @line = <$fh>; is_deeply(\@line, [ "foo\n", 'bar' ], 'wantarray works on readline'); }