ある時点でクラッシュしたプログラムによって以前にバインドされていたポートのバインドを解除する方法はありますか?開発マシンを1時間ごとに再起動するのは好きではありません。
プログラムに接続がある場合、およびプロセスを強制終了した後、ポートが長引くようにタイムアウトを定義できます。
そのタイムアウトを変更するために必要なカーネル変数は次のとおりです。
差出人: Linux TCP Tuning
/proc/sys/net/ipv4/tcp_tw_reuse
-これにより、プロトコルの観点から安全な場合に、新しい接続にTIME_WAIT状態のソケットを再利用できます。デフォルト値は0(無効)です。/proc/sys/net/ipv4/tcp_fin_timeout
-この設定は、TCP/IPが閉じた接続を解放してそのリソースを再利用できるようになるまでに経過する必要がある時間を決定します。このTIME_WAIT状態の間、クライアントへの接続を再開する方が、新しい接続を確立するよりもコストがかかりません。このエントリの値を減らすことにより、TCP/IPは閉じた接続をより速く解放し、新しい接続に使用できるリソースを増やすことができます。
次の方法で一時的に変更できます。
Sudo sysctl -w Sudo sysctl -w net.ipv4.tcp_fin_timeout=30
Sudo sysctl -w Sudo sysctl -w net.ipv4.tcp_tw_reuse=1
または、構成を永続的に追加するには、/etc/sysctl.conf
を編集して、以下を追加します。
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_tw_reuse=1
したがって、起動時にも適用されます。
詳細なガイダンスについては、以下をお読みください。 TIME_WAITソケット接続を減らす
アプリケーションレベルでは、この投稿に従って靴下を開くときにSO_REUSEADDRを指定することもできます: https://stackoverflow.com/questions/767292/how-do-i-close-a-port-in-a-プログラム終了の場合
Dr01が述べているように、別の方法は手動で行うことです。
service networking restart