我最近遇到了TCP服務器和客戶端之間的中間連接斷開的問題。如果主服務器關閉,客戶端需要連接到輔助服務器。當主服務器購買時(例如,通過在終端上執行^ C),會有TCP關閉序列通過,客戶端成功檢測到斷開的鏈接並嘗試次要服務器。但是,如果中間鏈接發生故障,客戶端和服務器將不知道它。客戶端可以檢測到的唯一方式是其TCP緩衝區充滿失敗的「發送」操作。TCP Keepalive是確定斷鏈的唯一機制嗎?
作爲解決方案,已使用'TCP Keepalive'機制。這件作品令人滿意。
我的問題是'TCP Keepalive'唯一的解決方案?
-Prabhu
根據RFC 1122,TCP在開始發送保持活動探測器之前至少需要2小時的空閒時間。如果不是大多數應用程序,這可能會成爲問題,並會限制TCP Keepalive的有用性。 – 2009-06-25 09:13:06
您可以使用TCP_KEEPCNT,TCP_KEEPIDLE和TCP_KEEPINTVL套接字選項(使用SOL_TCP級別,而不是SOL_SOCKET)控制保持活動行爲。 2小時不是最小空閒時間 - 這是默認空閒時間。 – qrdl 2009-06-25 09:23:46