如何在python中关闭udp socket

时间:2017-11-16 07:58:01

标签: python python-3.x sockets udp

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

 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套接字。

提前致谢。

1 个答案:

答案 0 :(得分:1)

self.socket.shutdown(socket.SOCK_DGRAM)

shutdown与UDP套接字无关,但与TCP无关。并且,shutdown仅关注如何关闭(SHUT_RDSHUT_WRSHUT_RDWR)而非关注协议的参数。

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