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

Socket.io-client 4.8.0 with Node native WebSocket 'Maximum call stack size exceeded' exception when closing the connection

Open vpmedia opened this issue 1 year ago • 1 comments

Describe the bug Using socket.io 4.8.0 server and socket.io-client 4.8.0 with native Node v21+ web socket transport I'm getting the following exception when the connection is closed between the client and the server. The WebSocket client is running server side using the new transport WebSocket option added in v4.8.0.

process.on('uncaughtException') log: (this is unexpected)

error: [Server] uncaughtException Maximum call stack size exceeded {"stack":"RangeError: Maximum call stack size exceeded\n    at emitInitScript (node:internal/async_hooks:495:24)\n    at process.nextTick (node:internal/process/task_queues:143:5)\n    at emitUncaughtException (node:internal/event_target:1090:11)\n    at [nodejs.internal.kHybridDispatch] (node:internal/event_target:824:9)\n    at WebSocket.dispatchEvent (node:internal/event_target:751:26)\n    at fireEvent (node:internal/deps/undici/undici:11340:14)\n    at failWebsocketConnection (node:internal/deps/undici/undici:11421:9)\n    at closeWebSocketConnection (node:internal/deps/undici/undici:11692:9)\n    at WebSocket.close (node:internal/deps/undici/undici:12352:9)\n    at WS.doClose (file:///REDACTED/node_modules/engine.io-client/build/esm-debug/transports/websocket.js:83:21)"}

socket.on('connect_error') log: (this is expected)

error: [Entity] onConnectError websocket error {"description":{},"stack":"Error: websocket error\n    at WS.onError (file:///REDACTED/node_modules/engine.io-client/build/esm-debug/transport.js:41:37)\n    at ws.onerror (file:///REDACTED/node_modules/engine.io-client/build/esm-debug/transports/websocket.js:51:39)\n    at [nodejs.internal.kHybridDispatch] (node:internal/event_target:816:20)\n    at WebSocket.dispatchEvent (node:internal/event_target:751:26)\n    at fireEvent (node:internal/deps/undici/undici:11340:14)\n    at failWebsocketConnection (node:internal/deps/undici/undici:11421:9)\n    at Object.processResponse (node:internal/deps/undici/undici:11635:13)\n    at node:internal/deps/undici/undici:10425:23\n    at node:internal/process/task_queues:151:7\n    at AsyncResource.runInAsyncScope (node:async_hooks:211:14)","type":"TransportError"}

vpmedia avatar Sep 22 '24 17:09 vpmedia

I've created a repository with a minimal example to reproduce the issue: https://github.com/vpmedia/socketio-issue

my node version is v22.9.0 my system is macOS 15.0 / Apple M3 Max

vpmedia avatar Sep 24 '24 10:09 vpmedia

I could indeed reproduce the issue, thanks for the example :+1:

This should be fixed by https://github.com/socketio/socket.io/commit/4865f2e62eff9cf59f602e753d9f84159a3139af, included in [email protected]. Could you please check?

darrachequesne avatar Oct 23 '24 09:10 darrachequesne

I'm on leave at the moment but I'll test it after next week. Thanks for the feedback!

vpmedia avatar Oct 25 '24 16:10 vpmedia

Everything working as expected, thank you!

vpmedia avatar Oct 29 '24 07:10 vpmedia