小编典典

SocketServer.ThreadingTCPServer-程序重新启动后无法绑定到地址

linux

作为无法在套接字程序崩溃后绑定地址的后续措施,我的程序重启后我收到此错误:

socket.error:[Errno 98]地址已在使用中

在这种特殊情况下,程序将直接启动其自己的线程化TCP服务器,而不是直接使用套接字:

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

如何解决此错误消息?


阅读 440

收藏
2020-06-03

共1个答案

小编典典

在这种特定情况下,.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)可以在allow_reuse_address设置选项时从TCPServer类调用。因此,我能够按以下方式解决它:

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

无论如何,以为这可能有用。该解决方案在Python 3.0中将略有不同

2020-06-03