The uServer (uWebSockets.js) implementation did not emit
"initial_headers" and "headers" events during WebSocket upgrades,
unlike the regular Server which does this via the ws "headers" event.
Related: https://github.com/socketio/socket.io/issues/5300
In some specific cases, the transport was not closed right away,
leaving the Node.js process alive even after closing the server.
The HTTP long-polling transport would be closed after the heartbeat
failure and the `closeTimeout` delay (20 + 25 + 30 seconds).
Example:
```js
io.on("connection", (socket) => {
// the writeBuffer is not empty, so the transport is not closed right away
io.close();
});
```
Related: https://github.com/socketio/socket.io/issues/5088