SuperSocket
SuperSocket copied to clipboard
急救!远程主机强迫关闭了一个现有的连接。
此代码:
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版本,同样监听此端口,报错也有,但是运行一天以后,新的客户端依然可以正常连接。 请问如何解决? 谢谢大佬!