Q
套接字丟失連接
2
A
回答
0
如果互聯網時時刻刻都來臨,您可能實際上不會丟失TCP會話。如果你這樣做,套接字API會拋出一些異常,通常是socket.timeout。
1
我假設你正在談論TCP。
如果您的網絡連接暫時停止,您可能根本不會丟失TCP連接,它只會重新傳輸並恢復操作。
有100多條你可能會失去連接的其他原因(例如,一個NAT網關在無意間斷開連接,另一端被核彈擊中,你的路由器燒燬了,另一端的那個人猛拉他的網線,等等,等等)
這裏是你應該做的,如果你需要檢測死同行/關閉插座等:
從插座或以任何其他方式等待閱讀它上面的傳入數據事件。這樣可以檢測連接是正常關閉還是發生錯誤(讀取時返回0或-1) - 至少如果另一端仍然能夠向主機發送TCP FIN/RST或ICMP數據包。
寫入插座 - 例如每N秒發送一次心跳。只要從套接字中讀取,在另一端靜靜地失敗時就不會檢測到問題。如果該PC脫機,它顯然可能不會告訴你它已經這麼做 - 所以你必須發送一些東西,看看它是否響應。
如果你不想每隔N秒寫一次心跳,你至少可以打開TCP keepalive - 並且如果對方死了,你最終會收到通知。您仍然必須從套接字讀取數據,並且通常每隔2小時發送一次Keepalive。儘管如此,這仍然比保持死亡插座好幾個月。
相關問題
- 1. 異步套接字連接丟失
- 2. 套接字連接失敗
- 3. 套接字連接失敗
- 4. 連接丟失
- 5. Java套接字和丟棄的連接
- 6. UDP連接導致套接字丟失數據包?
- 7. 如何檢測套接字連接何時丟失?
- 8. 如何模擬套接字連接丟失?
- 9. 某些客戶的iOS TCP套接字連接丟失
- 10. QT套接字讀取丟失字節
- 11. 丟失字符串中的套接字
- 12. 丟失的連接
- 13. WinDivert連接丟失
- 14. SSIS連接丟失
- 15. SSH連接丟失
- 16. NSURLConnection丟失連接
- 17. Spring MqttPahoMessageDrivenChannelAdapter丟失連接:連接丟失;正在重試
- 18. Spring Mqtt:MqttPahoMessageDrivenChannelAdapter - 丟失的連接:連接丟失;正在重試
- 19. 套接字連接總是失敗
- 20. C連接失敗套接字
- 21. Linux套接字(AF_UNIX)連接()失敗
- 22. Sequel Pro - 套接字連接失敗
- 23. 套接字重新連接失敗
- 24. NodeJS + Socket.io連接丟失/重新連接?
- 25. 從套接字丟失的數據
- 26. Massconnect丟失屬性套接字
- 27. Python套接字 - 連接套接字
- 28. 套接字連接
- 29. 如果在讀取字節之前斷開連接,TCP套接字連接上的字節是否丟失?
- 30. MYSQL connector.net連接丟失
我不認爲它真的發出任何異常。它只是坐在那裏,什麼都不做。 – 2010-04-23 11:13:19
啊是的,你必須調用'socket.settimeout()'。我不確定如何區分傳輸中的長時間停頓和實際中斷。抱歉。 – 2010-04-23 11:23:59