gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 17:28:12 26 4
gpt4 key购买 nike

我正在使用客户端/服务器套接字编写 Python 脚本。在搜索替代解决方案后,我不确定我的解决方案是否正确或最佳。

我已经阅读了这些帖子:

Python handling socket.error: [Errno 104] Connection reset by peer

Asyncio detecting disconnect hangs

他们的解决方案对我不起作用,但我有以下内容。我不确定它是否正确或干净。

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 使用 except,我会得到一个错误,因为当我终止客户端时数据会引发 connectionReset

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

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

最佳答案

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

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

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

关于Python 3.5.1 - Asyncio - 检查套接字客户端是否已断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36844991/

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