SocketServer.ThreadingTCPServer - Kann nicht binden Adresse nach einem Neustart des Programms

StackOverflow https://stackoverflow.com/questions/2274320

Frage

Als Follow-up zu kann nicht-bind-to-Adresse -nach-socket-Programm-Abstürze , ich erhielt diesen Fehler nach meinem Programm neu gestartet wurde:

  

socket.error: [Errno 98] Adresse bereits in Gebrauch

In diesem speziellen Fall, sondern eine Buchse direkt zu verwenden, wird das Programm seiner eigenen Gewinde TCP Server zu starten:

httpd = SocketServer.ThreadingTCPServer(('localhost', port), CustomHandler)
httpd.serve_forever()

Wie kann ich diese Fehlermeldung beheben?

War es hilfreich?

Lösung 2

In diesem speziellen Fall .setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) kann aus der TCPServer Klasse aufgerufen werden, wenn die allow_reuse_address Option eingestellt ist. Also ich in der Lage war, es zu lösen, wie folgt:

httpd = SocketServer.ThreadingTCPServer(('localhost', port), CustomHandler, False) # Do not automatically bind
httpd.allow_reuse_address = True # Prevent 'cannot bind to address' errors on restart
httpd.server_bind()     # Manually bind, to support allow_reuse_address
httpd.server_activate() # (see above comment)
httpd.serve_forever()

Wie auch immer, dachte dies nützlich sein könnte. Die Lösung wird etwas anders sein in Python 3.0

Andere Tipps

Die obige Lösung nicht für mich arbeiten, aber dies tat:

   SocketServer.ThreadingTCPServer.allow_reuse_address = True
   server = SocketServer.ThreadingTCPServer(("localhost", port), CustomHandler)
   server.serve_forever()
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top