Socket.EndAccept() error 10054

本文关键字:error 10054 EndAccept Socket | 更新日期: 2023-09-27 18:10:59

新用户到这里的网站。

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

还有一个问题,我应该把待办事项设置成什么?

Socket.EndAccept() error 10054

偶尔的"连接重置"是合法的。在您开始处理之前,客户端可能已经关闭了连接。即使出现这个错误,也必须继续接受其他请求。因此,listener.BeginAccept应该在finally