SuperSocket icon indicating copy to clipboard operation
SuperSocket copied to clipboard

急救!远程主机强迫关闭了一个现有的连接。

Open loveyeguo opened this issue 2 months ago • 20 comments

此代码:

   private async Task KeepAccept(Socket listenSocket)
   {
       while (!_cancellationTokenSource.IsCancellationRequested)
       {
           try
           {
               var client = await listenSocket.AcceptAsync().ConfigureAwait(false);
               OnNewClientAccept(client);
           }
           catch (Exception e)
           {
               if (e is ObjectDisposedException || e is NullReferenceException)
                   break;
               
               if (e is SocketException se)
               {
                   var errorCode = se.ErrorCode;

                   //The listen socket was closed
                   if (errorCode == 125 || errorCode == 89 || errorCode == 995 || errorCode == 10004 || errorCode == 10038)
                   {
                       break;
                   }
               }
               
               _logger.LogError(e, $"Listener[{this.ToString()}] failed to do AcceptAsync");
               continue;
           }
       }

       _stopTaskCompletionSource.TrySetResult(true);
   } 

目前客户端有200多个,运行几分钟后,程序一直报错: Listener[Ip=Any, Port=1799, Security=None, Path=, BackLog=0, NoDelay=False] failed to do AcceptAsync远程主机强迫关闭了一个现有的连接。 此时测试程序端口仍然能够正常连接并传输数据,只是一直报错而已。但运行5-6小时后,新的客户端将无法再次连接。 我使用老版1.6版本,同样监听此端口,报错也有,但是运行一天以后,新的客户端依然可以正常连接。 请问如何解决? 谢谢大佬!

loveyeguo avatar Dec 16 '24 04:12 loveyeguo