socketio / socket.io

Realtime application framework (Node.JS server)
https://socket.io
MIT License
60.83k stars 10.09k forks source link

Cannot catch websocket error #5102

Open ASBaj opened 5 years ago

ASBaj commented 5 years ago

You want to:

Current behaviour

What is actually happening? When an unhanded websocket error is thrown (transport.js 64), there does not appear to be a way to prevent the node.js application from crashing.

Steps to reproduce (if the current behaviour is a bug)

  1. Connect your socket.io client to a socket.io server
  2. Connect a device to your network that has the same IP address as your socket.io server
  3. Disconnect your socket.io server from the network
  4. The socket.io client will crash with this error.

Expected behaviour

The socket.io client would disconnect, and then go into a reconnecting state.

Setup

ASBaj commented 5 years ago

Turns out the error can be caught, with this:

process.on('uncaughtException', function (err) { console.log('UNCAUGHT EXCEPTION - keeping process alive:', err); // err.message is "foobar" });

Found it somewhere on StackExchange. Does the job, but I still think it would be better if we had a way to catch this without having to do a generic catch-all.

4F2E4A2E commented 5 years ago

@ASBaj why did you reopen?

ASBaj commented 5 years ago

Because the process.on event I linked earlier catches all uncaught exceptions, irrespective of their source. According to a variety of opinions I read, this is not considered to be best practice; if an unhandled exception occurs, the program should crash, and the individual exception should be dealt with, and hence, we should have a way to catch this specific exception.

karmac2015 commented 5 years ago

I have the same issue, is there any solution for this problem. I need to catch the error and know which socket cause the problem (the source) because I have multiple client socket to different servers.

Maximvdw commented 4 years ago

Any update on this issue after 2 years?