如何在python中关闭udp套接字

如何在python中关闭udp套接字,python,python-3.x,sockets,udp,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>

我有一个套接字侦听器线程正在运行,当满足特定条件时,它应该会关闭

 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()
同样的问题是,如果我使用户关闭,关闭。 有人能帮我在使用UDP套接字时如何调用shutdown()函数吗

提前谢谢

shutdown
与UDP套接字无关,但与TCP相关。而且,
shutdown
只接受关于如何关机的参数(
shutu-RD
shutu-WR
shutu-RDWR
),而不是像您这样的协议


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

因此,您在同一级别上有一个方法(
\uuuuu init\uuuuuuuu
)和一个函数(
kill\u function
,no
self
)。是的,kill函数有self,这是一个输入错误。那么,我如何向轮询UDP套接字的线程发出信号,表明套接字已关闭?关闭TCP套接字在这方面效果很好。@AlexGrönholm:我假设您想通知某个远程应用程序,在这个连接上将不再发送数据。使用TCP,您可以关闭套接字,这会导致连接中断,其中包括发送FIN,以便对等方知道套接字已关闭。对于UDP,没有这样的概念,甚至没有与UDP真正连接的概念。如果您需要明确地通知对等方您已经完成了,那么您需要使用这些消息定义一个应用程序协议并使用它。关于这一点,请创建一个新问题,不要在评论中提问。我的问题是当另一个线程关闭套接字时通知读者,但根据我的研究,这在套接字级别上是不可能的,需要一些软件框架级别的机制。
OSError: [Errno 107] Transport endpoint is not connected error when I try to 
kill the socket.
self.socket.shutdown(socket.SOCK_DGRAM)