2015-03-13 67 views
0

我有我的應用程序的tcp套接字。使用10秒的頻率啓用TCP保持活動狀態。tcp保持活着基本查詢

此外,我還在每秒1秒之間在應用程序和服務器之間流動以獲取狀態。

因此,由於無論如何都會以更快的速度在套接字上流動消息,所以根本不會有活躍的流動。

現在,請考慮以下情況:遠程服務器已關閉,因此週期性消息發送(每1秒發生一次)連續失敗3-5次。我不認爲通過啓用tcp保持活力,我們可以檢測到套接字已損壞,我們可以嗎?

我們是否必須在我們的代碼中建立邏輯來確保如果這個週期性的msg連續失敗了一定次數,另一端會被認爲是死的?

讓我知道。

回答

1

在您的應用程序中,啓用保持活動是沒有意義的。 保持活躍是爲了有一個開放的連接的應用程序,並沒有一直使用它,你一直在使用它,所以不需要保持活着。 當你發送一些內容並且另一端崩潰時,客戶端上的TCP會以遞增的超時發送所有重傳。最後,如果你有一個阻塞套接字,那麼你很可能會在發送操作中得到一個錯誤指示,你知道你必須關閉套接字並重新嘗試連接。 錯誤指示是插座操作的返回代碼是< 0. 我不知道這些超時值的重點,但它可能會長達一分鐘或更長時間。 當服務器正常關閉時,意味着它將關閉其發送的套接字,您將通過在您的接收套接字上接收0字節來獲取該信息。

你可能會想看看我昨天的答案,以及:

Reset TCP connection if server closes/crashes mid connection

0

不,你不需要假設任何事情。連接會因爲發送超時或保持活動超時而中斷。無論哪種方式,連接都會中斷,您將開始在讀取和寫入時發生錯誤。