C# Socket.EndAccept()错误10054
新用户访问此站点 我正在一个简单的异步tcp服务器上工作。我的连接侦听器如下所示C# Socket.EndAccept()错误10054,c#,.net,sockets,tcp,C#,.net,Sockets,Tcp,新用户访问此站点 我正在一个简单的异步tcp服务器上工作。我的连接侦听器如下所示 public static bool Listen(int port) { try { IPEndPoint ep = new IPEndPoint(IPAddress.Any, port); listener = new Socket(ep.AddressFamily, SocketType.Stream, Proto
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。然后,每次连接尝试都会发生错误,直到我重新启动侦听器。有什么问题吗
另外一个问题是,我应该将我的待办事项设置为什么 偶尔的“连接重置”是合法的。在开始处理之前,客户端可能已关闭连接。即使当您收到该错误时,您也必须继续接受其他请求。
因此,
listener.beginacept
应该在最后
块中谢谢您快速的信息性回复。我没有意识到异常后它不会继续,我想我的大脑已经关闭了,因为今天是星期天。为什么你对SocketException
有特别的捕捉?如果您让它落入catch(Exception)
中,您将看到实际的错误消息,并更好地理解发生的情况。我为SocketException进行了一次特殊转换,因为我需要本机套接字错误代码。我没有太多的编码经验,所以我认为一个特殊的捕获将是最好的。