438665a1

By: Tom Sydney Kerckhove <syd@cs-syd.eu>

warp: read the errno, not the error type, for a closed listener

Deciding whether the accept loop ends quietly was done on
ioeGetErrorType == InvalidArgument. That is two errnos, not one: EBADF, the
closed listening socket this is about, and EINVAL, a socket that is not
listening. The second is a fault the caller wants raised, and it was being
swallowed as if someone had asked for a shutdown.

Check EBADF directly instead, through the isErrno helper the branches above
already use. It is exact rather than nearly right: 'close' swaps the
descriptor for -1 before the syscall, so an accept() racing it has nothing
to find but EBADF.

Asked for by @kazu-yamamoto in review, and it drops this PR's reliance on
InvalidArgument standing in for a lost listener, which is what #873 objects
to.

Suite timing

Time to Start Worker time Duration Time to finish Idle
Config 0s 2s 2s 2s 0s
Eval - - - - -
Build - - - - -
Suite 0s 2s 2s 2s 0s

Timeline

0s