SocketServer.ThreadingTCPServer - プログラムの再起動後にアドレスにバインドできません

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

質問

のフォローアップとして ソケットプログラムがクラッシュした後、アドレスにバインドできません, 、プログラムを再起動した後、次のエラーが発生しました。

ソケットエラー:[エラー番号 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()
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top