特定のTCPポートをリッスンするコードがあります。しかし、このコードを停止してすぐに再起動すると、エラーが表示されます。
ERROR: could not bind to socket on 0.0.0.0:7700
1分ほど待つと、突然このポートが「解放」され、コードが再度実行されます。
私の質問:この特定のポートを「無料」にする方法はありますか? 1分ほど待たずに、コードをすぐに開始できるようにするには?
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の意味は何ですか? 。