我有一个套接字侦听器线程正在运行,它应该在满足特定条件时关闭。这是我的代码片段。
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。 任何人都可以帮助我如何调用shutdown()函数,同时使用UDP套接字。
提前致谢。
答案 0 :(得分:1)
self.socket.shutdown(socket.SOCK_DGRAM)
shutdown
与UDP套接字无关,但与TCP无关。并且,shutdown
仅关注如何关闭(SHUT_RD
,SHUT_WR
,SHUT_RDWR
)而非关注协议的参数。
除此之外,您的代码将UDP套接字绑定到本地地址,但不将其连接到另一个地址,即它可以使用socket.sendto
发送到任何地方。因此,当您尝试关闭不存在的连接时,您会收到插槽未连接的消息。