gpt4 book ai didi

c# - Socket.EndAccept() 错误 10054

转载 作者:可可西里 更新时间:2023-11-01 02:55:02 25 4
gpt4 key购买 nike

新用户到此站点。

我正在开发一个简单的异步 TCP 服务器。我的连接监听器如下所示。

    public static bool Listen(int port)
{
try
{
IPEndPoint ep = new IPEndPoint(IPAddress.Any, port);
listener = new Socket(ep.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

listener.Bind(ep);
listener.Listen(4);

listener.BeginAccept(new AsyncCallback(AcceptCallback), listener);
return true;
}
catch (Exception e)
{
Console.WriteLine("Unknown exception: {0}", e.ToString());
return false;
}
}

private static void AcceptCallback(IAsyncResult res)
{
try
{
Socket listener = (Socket)res.AsyncState;
Socket inSocket = listener.EndAccept(res);

Console.WriteLine("Accepted handle: {0}", inSocket.Handle);

listener.BeginAccept(new AsyncCallback(AcceptCallback), listener);
}
catch (SocketException se)
{
Console.WriteLine("SocketException: {0}", se.ErrorCode);
}
catch (Exception e)
{
Console.WriteLine("Unknown exception: {0}", e.ToString());
}
}

大多数时候它工作正常,但偶尔 listener.EndAccept(res) 会触发 socketexception。它的错误代码为 10054。然后,每次连接尝试都会出现错误,直到我重新启动监听器。可能是什么问题?

还有一个问题,我应该将 backlog 设置为什么?

最佳答案

偶尔的“连接重置”是合法的。客户端可能在您开始处理之前关闭了连接。即使出现该错误,您也必须继续接受其他请求。所以,listener.BeginAccept 应该在 finally block 中

关于c# - Socket.EndAccept() 错误 10054,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7704417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com