Python 3.5.1-Asyncio-检查套接字客户端是否已断开连接

Python 3.5.1-Asyncio-检查套接字客户端是否已断开连接,python,sockets,python-3.x,python-asyncio,Python,Sockets,Python 3.x,Python Asyncio,我正在使用客户机/服务器套接字编写Python脚本。在寻找替代解决方案后,我不确定我的解决方案是正确的还是最好的 我读过这些帖子: 他们的解决方案对我不起作用,但我有以下几点。我不确定这是正确的还是干净的 try: # See if client has disconnected. try: data = (await asyncio.wait_for(client_reader.readline(),timeout=0.01)) except ConnectionRes

我正在使用客户机/服务器套接字编写Python脚本。在寻找替代解决方案后,我不确定我的解决方案是正确的还是最好的

我读过这些帖子:

他们的解决方案对我不起作用,但我有以下几点。我不确定这是正确的还是干净的

try:
  # See if client has disconnected.
  try:
    data = (await asyncio.wait_for(client_reader.readline(),timeout=0.01))
  except ConnectionResetError, ConnectionAbortedError) as e:
    break  # Client disconnected
except TimeoutError:
  pass  # Client hasn't disconnect
如果对ConnectionResetError不使用除之外的,则会得到一个错误,因为当我杀死客户端时,数据会引发connectionReset

检测不规则的客户端断开连接是一个很好的解决方案吗


ps:谢谢你清理了措辞和语法。

只要你没有与套接字交互,你就不知道它是否仍然连接。处理断开连接的正确方法不是检查套接字的状态,而是验证读或写操作是否由于此类错误而失败

通常,人们至少总是在等待套接字上的read(),这是应该查找断开连接的地方。当异常发生时,流将被检测为已关闭,并将异常传播到此套接字上等待操作的任何其他任务。这意味着,如果您在一个流上有并发操作,您必须期望在任何地方引发此异常,并在代码中的任何地方处理它

关于捕获的异常:检查ConnectionError是最好的解决方案,它是与连接相关的所有异常(ConnectionBortedError、ConnectionResetError等)的父类