我知道 Twisted 可以很好地做到这一点,但是如果只是简单的套接字呢?
你如何判断套接字中的连接是否随机丢失?就像,如果我的互联网在一秒钟内停止并重新连接。
我假设你正在谈论 TCP。
如果您的互联网连接中断了一秒钟,您可能根本不会丢失 TCP 连接,它只会重新传输并恢复操作。
当然,还有数百个其他原因可能会导致您失去连接(例如,中间的 NAT 网关决定默默地断开连接。另一端被核武器击中。您的路由器烧毁。另一端的人拔掉了他的网络电缆等)
如果您需要检测死对等/关闭的套接字等,您应该执行以下操作:
从套接字读取或以任何其他方式等待其上传入数据的事件。这允许您检测连接何时正常关闭,或者连接上发生错误(读取返回 0 或 -1) - 至少另一端是否仍然能够向您的主机发送 TCP FIN/RST 或 ICMP 数据包。
写入套接字 - 例如每 N 秒发送一些心跳。当另一端无提示地发生故障时,仅从套接字读取无法检测到问题。如果该电脑离线了,它显然无法告诉您它离线了 - 因此您必须向它发送一些内容并查看它是否响应。
如果您不想每 N 秒写入一次心跳,您至少可以打开 TCP keepalive - 如果对等方死亡,您最终会收到通知。您仍然需要从套接字读取数据,并且默认情况下通常每 2 小时发送一次保活信息。不过,这仍然比将死插座保留数月要好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)