Python SocketServer.TCPServer中有没有检测客户端断开连接的方法?

3

我尝试了下面的代码,但没有成功。基本上,我需要一种检测客户端断开连接的方法。我想避免使用繁琐的心跳类型系统。有没有办法检测套接字何时不再打开(无论是客户端已断开连接还是被中断等)?

class ThreadedTCPRequestHandler(SocketServer.StreamRequestHandler):
    def handle(self):
        while True:
            self.data = self.rfile.readline().strip()
            if not self.data:
                print 'Client closed connection'
                break

我认为这个方法应该可行,但实际上好像不行(即使尝试去掉strip()也是如此)。有人有什么想法吗?


现在已经很晚了,而且这是一种非常粗糙的方法,但至少为了测试目的,一个简单的解决方法是使用一个包含在try-catch块中的超时来检测潜在的断开连接的客户端。 - Patronics
1个回答

3

一般情况下,检测到客户端'默默地'不可用是不可能的。除非客户端以受控方式关闭连接(即执行FIN四次握手),否则服务器将无法检测到死亡的客户端,除非它试图与客户端通信并失败。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接