SocketServer.ThreadingTCPServer - Ne peut pas lier à l'adresse après le redémarrage du programme

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

Question

En tant que suivi ne peut pas se lier-à-adresse -Après programme-socket-accidents , je recevais cette erreur après mon programme a été redémarré:

  

socket.error: [Errno 98] Adresse déjà utilisée

Dans ce cas particulier, au lieu d'utiliser une prise directement, le programme démarre son propre serveur TCP fileté:

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

Comment puis-je résoudre ce message d'erreur?

Était-ce utile?

La solution 2

Dans ce cas particulier, .setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) peuvent être appelés de la classe TCPServer lorsque l'option allow_reuse_address est définie. Donc, je suis en mesure de le résoudre comme suit:

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

Quoi qu'il en soit, pensé que cela pourrait être utile. La solution sera légèrement différent en Python 3.0

Autres conseils

La solution ci-dessus ne fonctionne pas pour moi, mais celui-ci a fait:

   SocketServer.ThreadingTCPServer.allow_reuse_address = True
   server = SocketServer.ThreadingTCPServer(("localhost", port), CustomHandler)
   server.serve_forever()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top