首页 文章

如何处理丢失连接的客户端的addr?

提问于
浏览
-1

我有一个使用文档中的模板实现的UDP服务器,可以在这里找到:https://docs.python.org/3/library/asyncio-protocol.html#udp-echo-server-protocol

我想知道丢失连接的客户端的addr . connection_lost回调只有一个参数,异常为exc .

编辑:在downvotes之后我想强调它不是模块中非常友好的部分,在数据报ServerProtocol类' connection_made '中命名回调 .

1 回答

  • 0

    Python API设计者需要正确记录这一点 .

    当您创建套接字并连接它时,它看起来像 connection_made()which in turn only happens if you specify a non-None Remote_addr .

    要理解所有这些,首先需要了解 connect() 对Berkeley套接字API级别的UDP套接字的作用:

    • 它调整套接字以便 write() and send() can be used as well as sendto()`,这两者都只发送到连接的目标地址 .

    • 它调节套接字以过滤掉所有未在连接目标上生成的数据报 .

    • 它不会创建任何类型的电线连接 . 对等方没有收到任何内容或以任何方式通过网络发送 .

    • 您可以多次 connect() UDP套接字,可以是不同的地址,也可以是null,这完全取消了(1)和(2) .

    所以,我只能想象当(4)发生时调用 connection_lost() 回调,它不在你的代码中 .

    无论它做什么,如果有的话,它肯定不能用于检测客户端何时断开连接,因为在UDP中没有这样的事件 .

相关问题