diff --git a/websocket-sharp/WebSocket.cs b/websocket-sharp/WebSocket.cs index 20b9e276..30833c28 100644 --- a/websocket-sharp/WebSocket.cs +++ b/websocket-sharp/WebSocket.cs @@ -968,6 +968,20 @@ namespace WebSocketSharp } } + private void fatal (string message, Exception exception) + { + var code = exception is WebSocketException + ? ((WebSocketException) exception).Code + : CloseStatusCode.Abnormal; + + close ( + new CloseEventArgs (code, message ?? code.GetMessage ()), + !code.IsReserved (), + false, + false + ); + } + private void init () { _compression = CompressionMethod.None; @@ -1558,28 +1572,33 @@ namespace WebSocketSharp _receivePong = new AutoResetEvent (false); Action receive = null; - receive = () => - WebSocketFrame.ReadFrameAsync ( - _stream, - false, - frame => { - if (!processReceivedFrame (frame) || _readyState == WebSocketState.Closed) { - var exit = _exitReceiving; - if (exit != null) - exit.Set (); - - return; + receive = + () => + WebSocketFrame.ReadFrameAsync ( + _stream, + false, + frame => { + if (!processReceivedFrame (frame) || _readyState == WebSocketState.Closed) { + var exit = _exitReceiving; + if (exit != null) + exit.Set (); + + return; + } + + // Receive next asap because the Ping or Close needs a response to it. + receive (); + + if (_inMessage || !HasMessage || _readyState != WebSocketState.Open) + return; + + message (); + }, + ex => { + _logger.Fatal (ex.ToString ()); + fatal ("An exception has occurred while receiving.", ex); } - - // Receive next asap because the Ping or Close needs a response to it. - receive (); - - if (_inMessage || !HasMessage || _readyState != WebSocketState.Open) - return; - - message (); - }, - ex => processException (ex, "An exception has occurred while receiving a message.")); + ); receive (); }