1
新用戶到此處的網站。Socket.EndAccept()錯誤10054
我正在研究一個簡單的異步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.然後,每次連接都會一直髮生,直到重新啓動偵聽器。問題是什麼?
另外還有一個問題,我應該如何設置我的積壓?
爲什麼你有'SocketException'的特殊捕獲?如果你讓它陷入'catch(Exception)'中,你會看到實際的錯誤信息並更好地理解正在發生的事情。 –
我爲SocketException做了一個特殊的轉換,因爲我想要原生套接字錯誤代碼。我沒有太多的編碼經驗,所以我認爲一個特殊的捕獲將是這個最好的。 –
使用Listen(int.MaxValue); –