2017-11-16 2 views
1

Ich habe ein Socket-Listener-Thread ausgeführt und es sollte geschlossen werden, wenn eine bestimmte Bedingung erfüllt ist. Hier ist mein Code-Snippet.Wie Udp-Socket in Python herunterfahren

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() 

Ich bin vor

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

Das gleiche Problem beobachtet, wenn ich Benutzer SHUT_RD, SHUT_RDWR. kann mir bitte jemand helfen, wie man die shutdown() Funktion aufruft, während man UDP Sockets benutzt.

Vielen Dank im Voraus.

+0

Also, Sie haben eine Methode ('__init__') und eine Funktion (' kill_function', keine 'self') auf der gleichen Ebene? –

+0

@KlausD. Ja Kill-Funktion hat das Selbst, es ist ein Tippfehler –

Antwort

1
self.socket.shutdown(socket.SOCK_DGRAM) 

shutdown ist nicht relevant für UDP-Sockets aber für TCP. Und, shutdown nimmt nur Argumente zum Herunterfahren (SHUT_RD, SHUT_WR, SHUT_RDWR) und nicht ein Protokoll, wie Sie es tun.

Abgesehen davon bindet Ihr Code den UDP-Socket an eine lokale Adresse, verbindet ihn aber nicht mit einer anderen Adresse, d. H. Er kann überall mit socket.sendto senden. Daher erhalten Sie die Meldung, dass der Socket nicht verbunden ist, wenn Sie versuchen, eine nicht vorhandene Verbindung zu schließen.

Verwandte Themen