gpt4 book ai didi

python - 如何检测套接字断开连接?/如何超时调用 socket.recv?

转载 作者:太空狗 更新时间:2023-10-30 02:34:51 27 4
gpt4 key购买 nike

我正在使用 gevent 修补套接字连接到流媒体服务器,并且我正在使用 adsl 连接。

我不控制服务器,但在我的测试中,如果我停止服务器,我可以通过检查 recv 的结果是否为空字符串来检测断开连接,但如果我关闭我的 adsl 调制解调器,recv 永远不会退出。如果我只是断开计算机的网络电缆,它也不会返回空字符串,但是当我重新连接它时,它会返回服务器同时发送的所有内容,所以我猜路由器或调制解调器正在为我保持连接打开并在我的网线断开时缓冲流。

我尝试将 socket.SO_RCVTIMEO 设置为几秒钟,但它没有检测到断开连接,recv 继续永远“阻塞”。这是 gevent,所以它只会阻塞 greenthread,但我需要尽快检测到这种断开连接,以便我可以尝试重新连接。

最佳答案

使用 gevent 提供的超时,例如在 with 语句中:

with Timeout(5, False):
data = sock.recv()

或作为函数:

data = gevent.with_timeout(5, sock.recv, timeout_value="")

关于python - 如何检测套接字断开连接?/如何超时调用 socket.recv?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6009365/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com