2

一部のポートを再利用できるようにしたいので、次のコードでソケットにsetsockoptを使用しています。

sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)

ただし、これは実際には機能しません。バインドエラーも発生していませんが、サーバーソケットが応答していません(開始しているように見えますが、接続しようとしても選択ループに入りません)。この動作は、スクリプトが予期せず終了した場合に発生し、サーバーがリッスンしているポートを変更すると、すべてが再び機能します。アドバイスをいただけますか?

編集: ソケットの名前を sock に変更しました。これは、このコード スニペットに付けた名前です。

4

2 に答える 2

3

SO_REUSEADDR は、Windows と Unix でセマンティクスが異なるようです。

このmsdn 記事(特に「SO_EXCLUSIVEADDRUSE の使用」の下の図) とこのunix faqを参照してください。

また、このpython バグ ディスカッション、このツイスト バグ ディスカッション、およびこのWindows と Unix ソケットの相違点のリスト も参照してください。

于 2010-02-18T23:00:36.003 に答える
1

setsockoptソケットオブジェクトのメソッドです。モジュールには属性socketがありません。setsockopt

于 2009-04-28T09:30:02.700 に答える