我對我所通過另一臺服務器上創建一個連接服務:如果偵聽服務關閉,爲什麼TcpClient.BeginConnect結果的AsyncWaitHandle.WaitOne不會返回false?
using (var clientSocket = new TcpClient())
{
...
//Connect async
var result = clientSocket.BeginConnect(hostIP, portNumber, null, null);
//Wait for connection up to our timeout
if (!result.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(5)))
{
//This is NEVER run
throw new Exception("Connection timed out.");
}
//It makes it here but shouldn't!
}
如果其它服務器啓動,但該端口上偵聽的服務關閉,這仍然返回true! (如果服務器關閉,它確實會拋出異常)
爲什麼?
如何讓我如果服務停止它失敗(因此沒有在聽該端口上的)?
這實際上做不同的事情或者是內部一樣BeginConnect? –
'ConnectAsync'只是一種更現代的異步連接套接字客戶端的方式,而'BeginConnect'似乎更像是一種傳統方法。在這裏看到更詳細的答案:http://stackoverflow.com/a/5765032/633098 – silkfire