diff --git a/NewLife.Remoting/Clients/WsChannel.cs b/NewLife.Remoting/Clients/WsChannel.cs index 0cfba6e..0ef59fd 100644 --- a/NewLife.Remoting/Clients/WsChannel.cs +++ b/NewLife.Remoting/Clients/WsChannel.cs @@ -154,6 +154,12 @@ private async Task DoPull(WebSocketClient socket, CancellationTokenSource source catch (ThreadInterruptedException) { break; } catch (TaskCanceledException) { } catch (OperationCanceledException) { } + catch (ObjectDisposedException) { break; } + catch (SocketException sex) when (IsNormalDisconnect(sex.SocketErrorCode)) + { + _client.Log?.Debug("[{0}]WebSocket连接断开[{1}]", _client.Name, sex.SocketErrorCode); + break; + } catch (Exception ex) { if (source.IsCancellationRequested) break; @@ -199,6 +205,14 @@ protected virtual async Task OnReceive(IPacket data, CancellationToken cancellat await _client.HandleAsync(data, ctx, cancellationToken).ConfigureAwait(false); } + /// 判断是否为正常断开的SocketError,这类错误降级为Debug日志 + /// Socket错误码 + /// 是否为正常断开 + protected static Boolean IsNormalDisconnect(SocketError socketError) => + socketError is SocketError.ConnectionReset // 10054 - 对方重置连接 + or SocketError.ConnectionAborted // 10053 - 连接被中止 + or SocketError.OperationAborted; // 995 - 操作被中止(本地socket关闭时) + /// 发送文本消息 /// 数据包 /// 取消令牌 diff --git a/NewLife.Remoting/Clients/WsChannelCore.cs b/NewLife.Remoting/Clients/WsChannelCore.cs index 001c2cb..46811e5 100644 --- a/NewLife.Remoting/Clients/WsChannelCore.cs +++ b/NewLife.Remoting/Clients/WsChannelCore.cs @@ -1,4 +1,5 @@ #if NETCOREAPP +using System.Net.Sockets; using System.Net.WebSockets; using NewLife; using NewLife.Collections; @@ -141,6 +142,19 @@ private async Task DoPull(WebSocket socket, CancellationTokenSource source) catch (ThreadInterruptedException) { break; } catch (TaskCanceledException) { } catch (OperationCanceledException) { } + catch (ObjectDisposedException) { break; } + catch (WebSocketException wex) when ( + wex.WebSocketErrorCode == WebSocketError.ConnectionClosedPrematurely || + socket.State == WebSocketState.Aborted) + { + _client.Log?.Debug("[{0}]WebSocket连接断开[{1}]", _client.Name, wex.WebSocketErrorCode); + break; + } + catch (SocketException sex) when (IsNormalDisconnect(sex.SocketErrorCode)) + { + _client.Log?.Debug("[{0}]WebSocket连接断开[{1}]", _client.Name, sex.SocketErrorCode); + break; + } catch (Exception ex) { if (source.IsCancellationRequested) break;