我正在使用gevent修补的套接字连接到流式服务器,并且正在使用adsl连接。如何检测套接字断开? /如何在超时时调用socket.recv?
我不控制服务器,但在我的测试中,如果我停止服务器,我可以通过检查recv的结果是否为空字符串来检测断开连接,但如果关闭我的adsl调制解调器,recv永不退出。如果我只是断开计算机的网线,它也不会返回一个空字符串,但是当我重新连接它时,它将返回服务器发送的所有内容,所以我猜测路由器或调制解调器正在为我保持连接并在我的网线断开连接时缓冲流。
我试着设置socket.SO_RCVTIMEO几秒钟,但没有检测到断开连接,recv一直继续“阻塞”。这是gevent,所以它只能阻止绿色线程,但我需要尽快检测到这种断开连接,因此我可以尝试重新连接。