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

时间:2018-06-12 08:14:42

标签: udp python-asyncio

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

我想知道丢失连接的客户端的地址。 connection_lost 回调只有一个参数, exc 表示异常。

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

1 个答案:

答案 0 :(得分:0)

Python API设计人员需要正确记录这一点。

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

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

  1. 它调整套接字以便write() and发送()can be used as well as sendto()`,这两者都只发送到连接的目标地址。
  2. 它调整套接字以过滤掉所有未在连接目标中生成的数据报。
  3. 创建任何类型的有线连接。没有人收到任何东西或以任何方式通过电汇发送。
  4. 您可以多次connect()一个UDP套接字,可以是另一个地址,也可以是null,这完全取消了(1)和(2)。
  5. 所以,我只能想象当(4)发生时调用connection_lost()回调,它不在你的代码中。

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