我一直認爲如果你沒有實現心跳,就沒有辦法知道TCP連接的一端是否意外死亡。如果該進程只是在一邊被殺死,並沒有優雅地退出,那麼套接字無法發送FIN或讓對方知道它已關閉。Tcp Socket Closed
(見這裏的一些例如評論http://www.perlmonks.org/?node_id=566568)的
但有我連接到了一個新的「取消斷開功能的所有訂單」抵消現場訂單庫存訂貨服務器如果客戶端DIS -connects。即使當我殺死我的進程時,它也能正常工作,而且我的應用程序絕對沒有心跳。
那麼它是如何發現我什麼時候殺死了這個過程呢?我的應用程序在Windows Server 2003上運行,訂單服務器位於Suse Linux Enterprise Server 10上。Windows是否檢測到與套接字關聯的進程不再活動併發送FIN?
順便說一句,你可以詳細說明「FIN數據包如何丟失」嗎? – Pacerier 2012-07-25 03:13:49
@Prier好吧,IP是不可靠的,有很多方式丟包或損壞。如果FIN報文(以及後續的FIN重傳報文或RST報文)丟失,那麼該對等方就不會知道這個事實。也許同行期待接收更多永不會發生的數據。 – nos 2012-07-25 14:44:31
是的我的意思是「數據包丟失或損壞的方式」是什麼? – Pacerier 2012-07-27 07:02:06