我有三個應用程序使用套接字相互交談。他們都可以在自己的機器上生活,但他們也可以共享一臺機器。現在我有兩個人在同一臺機器上,第三臺機器在同一臺機器上。我試圖讓我的通信防彈,所以我拔掉電纜,並殺死應用程序,以確保一切按預期工作。拔下網線時套接字會發生什麼變化?
這裏的東西速寫:
alt text http://i40.tinypic.com/9vch86.png
現在,當我拔掉網線PC2(紅色連接「精讀B」),內部連接停止講話(藍色連接「Con A」)。我從永遠不會到「App 2」的套接字上發送來自「App 1」的東西。
我做了一個機制,發現這一點,並斷開連接,然後重新連接,之後,我可以拔掉所有我想要的電纜和「Con A」只是繼續工作。這只是第一次。
在斷開「Con B」之前,我已確認通過「Con A」進行了通信。
我連接和重新連接完全一樣的方式,它是相同的代碼,所以沒有什麼區別。
發生了什麼事?
由答案觸發的附加信息: PC 1和PC 2共享地址直到最後一個字節。
我有一個內部保活機制,我發送一條消息,並期望每10秒響應一次。
當我殺了App 3時,只有拔掉電纜時纔會發生這種情況。
不幸的是,如果您只是在等待數據,這不會讓您從不被通知。如果沒有keepalive,可能沒有死對等的OOB通知 - 如果沒有先發送()某些東西,套接字狀態不能用於檢測失敗情況。這就是爲什麼Keepalive非常重要。 – Einstein 2009-01-13 08:57:02