2014-01-25 46 views
0

在民意調查方法的MSDN描述,SelectRead選項,解釋時,如果任何條件都成立的返回值將是正確的:Socket.Poll方法在達到超時前返回false的可能原因是什麼?

  • Listen方法被調用和連接懸而未決。

  • 數據可供閱讀。

  • 連接已關閉,重置或終止。

因爲投票是一個阻塞方法,這是有道理的,該方法將「等待」任何這些條件變成真的,如果達到超時,返回false。

但是在我的應用程序中,我在遇到超時之前遇到'false'返回值。

我想知道導致這種情況的原因是什麼? 有沒有準確的方法知道?

+1

你需要告訴我們你的應用程序代碼,沒有它是不可能有人能夠診斷問題.... –

+0

我在我的代碼中有以下行:'bool hasSomething = mySocket.Poll(pollTime,SelectMode。 SelectRead);'pollTime爲15秒(微秒)。它立即返回(或者可能在〜1秒之後 - 絕對不是15)並且值爲'false'。該代碼來自HTTP客戶端。在發送一個HTTP請求之後,客戶機讀取字節後的響應字節,並且每個字節執行我提到的那一行。然後它運行'Socket.Receive')。它通常運行良好,但有一個服務器和一個特定的URL,導致所提到的調用「民意調查」返回false(並不總是,但非常頻繁)。 – Ayal

+0

也許您的套接字啓用了KeepAlive,並且服務器無法訪問,導致poll因爲某些keepalive數據包被丟棄而返回? –

回答

-1

連接系統很難診斷。您可以嘗試使用網絡嗅探器來檢查當時發生了什麼。

您也可以嘗試使用的方法就像這裏: https://etwcontroler.codeplex.com/

在客戶端和服務器創建ETW會話,並停止錄製時壞的情況發生,所以你已經記錄了什麼你的客戶端上發生,服務器和網絡。

相關問題