Socket.EndAccept()错误10054

时间:2011-10-09 15:06:26

标签: 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, 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());
        }
    }

大部分时间它工作正常,但偶尔会监听.EndAccept(res)会触发socketexception。它有错误代码10054.然后,每次连接尝试都会发生错误,直到我重新启动监听器。问题是什么?

另外一个问题是,我该如何设置我的积压工作?

1 个答案:

答案 0 :(得分:0)

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