C# Socket.EndAccept()错误10054

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

新用户访问此站点

我正在一个简单的异步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。然后,每次连接尝试都会发生错误,直到我重新启动侦听器。有什么问题吗

另外一个问题是,我应该将我的待办事项设置为什么

偶尔的“连接重置”是合法的。在开始处理之前,客户端可能已关闭连接。即使当您收到该错误时,您也必须继续接受其他请求。
因此,
listener.beginacept
应该在
最后
块中

谢谢您快速的信息性回复。我没有意识到异常后它不会继续,我想我的大脑已经关闭了,因为今天是星期天。为什么你对
SocketException
有特别的捕捉?如果您让它落入
catch(Exception)
中,您将看到实际的错误消息,并更好地理解发生的情况。我为SocketException进行了一次特殊转换,因为我需要本机套接字错误代码。我没有太多的编码经验,所以我认为一个特殊的捕获将是最好的。