SocketServer.ThreadingTCPServer - Cannot bind to address after program restart

前端 未结 2 1471
长发绾君心
长发绾君心 2020-12-10 13:18

As a follow-up to cannot-bind-to-address-after-socket-program-crashes, I was receiving this error after my program was restarted:

socket.error: [Errno

相关标签:
2条回答
  • 2020-12-10 13:36

    In this particular case, .setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) may be called from the TCPServer class when the allow_reuse_address option is set. So I was able to solve it as follows:

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

    Anyway, thought this might be useful. The solution will differ slightly in Python 3.0

    0 讨论(0)
  • 2020-12-10 13:59

    The above solution didn't work for me but this one did:

       SocketServer.ThreadingTCPServer.allow_reuse_address = True
       server = SocketServer.ThreadingTCPServer(("localhost", port), CustomHandler)
       server.serve_forever()
    
    0 讨论(0)
提交回复
热议问题