2013-05-08 6 views
12

Ich habe die Dokumentation für SocketServer betrachtet. Ich kopierte den TCP-Server-Code aus der Dokumentation und es läuft gut. Allerdings habe ich festgestellt, dass, wenn ich das Programm in meinem Terminal-ctrl c'ed, und dann versucht, es wieder zu laufen, würde ich die folgende Fehlermeldung erhalten:SocketServer: loswerden '[Errno 98] Adresse bereits verwendet'

socket.error: [Errno 98] Address already in use 

Ich sah, wie sich das Problem zu beheben durch Lesen this und this. Ich fügte hinzu, die zu meinem Code folgende Zeile zu versuchen, die Wiederverwendung der Adresse zu ermöglichen:

server.allow_reuse_address = True 

ich immer noch das gleiche Problem erlebe auch mit der obigen Zeile hinzugefügt. Ich fügte auch eine try und except um meine server.serve_forever() Funktion hinzu, die Ausnahme KeyboardInterrupt abfangend und server.shutdown() und in der Hoffnung nennend, dass die Adresse befreit würde.

Hier das volle Ausmaß meines TCP-Server-Code ist (Anmerkung: ausgeschlossen ich die MyTCPHandler Klasse):

if __name__ == "__main__": 
    HOST, PORT = '', 9999 

    # Create the server, binding to localhost on port 9999 
    server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler) 
    server.allow_reuse_address = True 

    # Activate the server; this will keep running until you 
    # interrupt the program with Ctrl-C 
    try: 
     server.serve_forever() 
    except KeyboardInterrupt: 
     server.shutdown() 
     server.socket.close() 

Ich bin immer noch den Fehler immer über den Code ausgeführt wird und in der Nähe einer Minute warten müssen, bis Die Adresse wird endgültig freigegeben. Das ist frustrierend, wenn ich meinen Code ständig debugge und ändere.

Ich verwende diesen Code mit Python 2.7.3 auf einem RaspberryPi mit Raspbian "Wheezy" 7.0.

Antwort

18
... 
SocketServer.TCPServer.allow_reuse_address = True 
server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler) 
... 

allow_reuse_address sollte auf die Klasse, nicht auf die Instanz.

+0

Das hat funktioniert. Vielen Dank! –