SocketServer.ThreadingTCPServer - não pode se ligar ao endereço após o reinício do programa

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

Pergunta

Como acompanhamento de Não pode fazer a ligação ao address-socket-socket-crashes, Eu estava recebendo esse erro depois que meu programa foi reiniciado:

Socket.Error: [Errno 98] Endereço já em uso

Nesse caso em particular, em vez de usar um soquete diretamente, o programa está iniciando seu próprio servidor TCP rosqueado:

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

Como posso corrigir esta mensagem de erro?

Foi útil?

Solução 2

Neste caso em particular, .setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) pode ser chamado da classe TCPServer quando o allow_reuse_address a opção está definida. Então eu consegui resolvê -lo da seguinte maneira:

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

Enfim, pensei que isso pode ser útil. A solução diferirá ligeiramente no Python 3.0

Outras dicas

A solução acima não funcionou para mim, mas esta fez:

   SocketServer.ThreadingTCPServer.allow_reuse_address = True
   server = SocketServer.ThreadingTCPServer(("localhost", port), CustomHandler)
   server.serve_forever()
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top