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