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. Java套接字和丢弃的连接
- 4. 如何模拟套接字连接丢失?
- 5. UDP连接导致套接字丢失数据包?
- 6. 丢失字符串中的套接字
- 7. SSIS连接丢失
- 8. NSURLConnection丢失连接
- 9. Spring MqttPahoMessageDrivenChannelAdapter丢失连接:连接丢失;正在重试
- 10. Sequel Pro - 套接字连接失败
- 11. 套接字重新连接失败
- 12. NodeJS + Socket.io连接丢失/重新连接?
- 13. 从套接字丢失的数据
- 14. Massconnect丢失属性套接字
- 15. Python套接字 - 连接套接字
- 16. 如果在读取字节之前断开连接,TCP套接字连接上的字节是否丢失?
- 17. MYSQL connector.net连接丢失
- 18. 丢失连接(32109) - java.io.EOFException(MqttAndroidClient)
- 19. C#MySQL丢失连接
- 20. 丢失连接 - PHP,MySQL的
- 21. 丢失连接(32109) - java.io.EOFException
- 22. Android - WebService连接丢失
- 23. 丢失连接到“iPhone”
- 24. 丢失连接后尽快丢弃流HTTP连接
- 25. Java NIO套接字应用程序:重用SocketChannel还是丢失连接?
- 26. 在连接丢失的情况下保持python套接字活着
- 27. 如何将套接字绑定到python的接口(socket.SO_BINDTODEVICE丢失)
- 28. AS3 TCP套接字丢包
- 29. 哎呀!失去连接到未定义 - 连接丢失后连接建立
- 30. MVC 2 Catch-All用于连接字符串丢失或连接失败
我不认为它真的发出任何异常。它只是坐在那里,什么都不做。 – 2010-04-23 11:13:19
啊是的,你必须调用'socket.settimeout()'。我不确定如何区分传输中的长时间停顿和实际中断。抱歉。 – 2010-04-23 11:23:59