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;