socket.io icon indicating copy to clipboard operation
socket.io copied to clipboard

Socket server tries to close external http server, causing `ERR_SERVER_NOT_RUNNING` error

Open panta82 opened this issue 3 years ago • 1 comments

Describe the bug

When you initialize socket server, you can either give it an external instance of HTTPServer, or let socket.io create its own internal instance.

However, in either case, SocketIO tries to close the server when shutting down:

https://github.com/socketio/socket.io/blob/3b7ced7af7e0a2a66392577f94af1ee5ed190ab1/lib/index.ts#L685

In my case, I have my own shutdown procedure elsewhere, and it causes server to throw ERR_SERVER_NOT_RUNNING error, because server.close() was called twice.

This might be appearing now due to new stricter behavior in node.js, I am not sure. This is running on v14.17.3.

Expected behavior

IMO socket.io should only close HTTP server if it's its own instance. If an instance is provided, it's someone else's responsibility to close that server. Socket.IO shouldn't interfere.

Mitigation

I am currently using this hack to prevent the uncaught exception:

ioServer['httpServer'] = null;
ioServer.close();

panta82 avatar Dec 07 '22 12:12 panta82

Hi! Yes this is a known issue, we will update the behavior in the next major release.

See: https://github.com/socketio/socket.io/discussions/4529

darrachequesne avatar Dec 08 '22 06:12 darrachequesne