SocketServer.ThreadingTCPServer - プログラムの再起動後にアドレスにバインドできません
質問
のフォローアップとして ソケットプログラムがクラッシュした後、アドレスにバインドできません, 、プログラムを再起動した後、次のエラーが発生しました。
ソケットエラー:[エラー番号 98] アドレスはすでに使用されています
この特定のケースでは、ソケットを直接使用する代わりに、プログラムは独自のスレッド TCP サーバーを起動します。
httpd = SocketServer.ThreadingTCPServer(('localhost', port), CustomHandler)
httpd.serve_forever()
このエラー メッセージを修正するにはどうすればよいですか?
解決 2
.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で多少異なります。
他のヒント
上記の溶液は私のために動作しませんでしたが、この1はなかった。
SocketServer.ThreadingTCPServer.allow_reuse_address = True
server = SocketServer.ThreadingTCPServer(("localhost", port), CustomHandler)
server.serve_forever()
所属していません StackOverflow