Ошибка Socket.EndAccept () 10054 - PullRequest
       1

Ошибка Socket.EndAccept () 10054

1 голос
/ 09 октября 2011

Новый пользователь на сайте здесь.

Я работаю на простом асинхронном 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());
        }
    }

В большинстве случаев он работает нормально, но иногда слушатель.Он имеет код ошибки 10054. Ошибка продолжает возникать при каждой попытке подключения, пока я не перезапущу прослушиватель.В чем может быть проблема?

Также дополнительный вопрос, на что я должен установить свое отставание?

1 Ответ

0 голосов
/ 09 октября 2011

Время от времени "сброс-соединение" является законным.Возможно, клиент закрыл соединение, прежде чем начать обработку.Даже когда вы получаете эту ошибку, вы должны продолжать принимать другие запросы.Итак, listener.BeginAccept должно быть в finally блоке

...