gpt4 book ai didi

python - 如何在 python 中关闭 udp 套接字

转载 作者:太空宇宙 更新时间:2023-11-04 04:54:45 25 4
gpt4 key购买 nike

我有一个正在运行的套接字监听器线程,它应该在满足特定条件时关闭。这是我的代码片段。

 def __init__(self, arg):

threading.Thread.__init__(self)
self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
receiver_port = int(<port>)
listen_addr = (<some ip>, receiver_port)
self.socket.bind(listen_addr)
self.shutdown = threading.Event()
self.shutdown.set()

def kill_function():

self.socket.shutdown(socket.SOCK_DGRAM)
self.shutdown.clear()
self.socket.close()

我在面对

OSError: [Errno 107] Transport endpoint is not connected error when I try to 
kill the socket.

如果我使用 SHUT_RD、SHUT_RDWR,也会观察到同样的问题。任何人都可以帮助我如何在使用 UDP 套接字时调用 shutdown() 函数。

提前致谢。

最佳答案

self.socket.shutdown(socket.SOCK_DGRAM)

shutdown 与 UDP 套接字无关,但与 TCP 相关。而且,shutdown 只接受有关如何关闭的参数(SHUT_RDSHUT_WRSHUT_RDWR),而不是协议(protocol)作为你会的。

除此之外,您的代码将 UDP 套接字绑定(bind)到一个本地地址,但不会将其连接到另一个地址,即它可以使用 socket.sendto 发送到任何地方。因此,当您尝试关闭不存在的连接时,您会收到套接字未连接的消息。

关于python - 如何在 python 中关闭 udp 套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47324358/

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