
プログラムがクラッシュしたときに以前にプログラムによってバインドされていたポートをバインド解除する方法はありますか?私は毎時間開発マシンを再起動するのが好きではありません。
答え1
プログラムが接続されている間およびプロセスが終了した後にポートが保持される時間制限を定義できます。
タイムアウトの変更に関連するカーネル変数は次のとおりです。
/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-case-of-program-termination
dr01が言ったように、別のオプションは手動で行うことです。
service networking restart