web-dev-qa-db-ja.com

TCPポートを「解放」する方法は?

特定のTCPポートをリッスンするコードがあります。しかし、このコードを停止してすぐに再起動すると、エラーが表示されます。

ERROR: could not bind to socket on 0.0.0.0:7700

1分ほど待つと、突然このポートが「解放」され、コードが再度実行されます。

私の質問:この特定のポートを「無料」にする方法はありますか? 1分ほど待たずに、コードをすぐに開始できるようにするには?

4
Alex

SO_REUSEADDRを使用できます

int optval = 1;
/* create socket using socket */
setsockopt(s1, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof optval);
/* bind socket */

TCPプロトコルにより、サーバーは、閉じたばかりのソケットをTIME_WAITで定義された時間の間、ステータスnet.ipv4.tcp_fin_timeoutに強制的に配置するため、このエラーが発生します。サーバーがソケットを閉じた後に他のピアが送信した可能性のあるすべてのパケットが、引き続き正しく処理されていることを確認してください。

スレッドのトップアンサーにあるこの問題のわかりやすい説明は次のとおりです。 SO_REUSEADDR(setsockoptオプション)-Linuxの意味は何ですか?

5
Kotte