clue · GitHub

The underlying `epoll_wait()` reports `EPOLLOUT|EPOLLERR|EPOLLHUP` on
the affected file descriptor, which `ext-uv` emits as an error code
`EBADF` with no events attached. We explicitly re-enable all active
events on this error event to invoke the writable listener for this
condition to match other event loop implementations and successfully
detect this as a refused connection attempt. All tests are now green.
We do not usually use or expose the `exceptfds` parameter passed to the
underlying `select`. However, Windows does not report failed connection
attempts in `writefds` passed to `select` like most other platforms.
Instead, it uses `writefds` only for successful connection attempts and
`exceptfds` for failed connection attempts. See also
https://docs.microsoft.com/de-de/windows/win32/api/winsock2/nf-winsock2-select
We work around this by adding all sockets that look like a pending
connection attempt to `exceptfds` automatically on Windows and merge it
back later. This ensures the public API matches other loop
implementations across all platforms (see also test suite or rather test
matrix). Lacking better APIs, every write-only socket that has not yet
read any data is assumed to be in a pending connection attempt state.

@clue

@clue

@clue

@clue

@clue clue changed the title Run tests on PHP 7.4 and simply test matrix and test setup Run tests on PHP 7.4 and simplify test matrix and test setup

Dec 31, 2019

WyriHaximus

jsor

jsor approved these changes Dec 31, 2019

@clue

@clue

@clue clue mentioned this pull request

Jan 9, 2020

Merged

This was referenced

Mar 4, 2020

Merged

Merged

Merged

Merged

Read the original on github.com ↗