GNU/Linux >> Linux の 問題 >  >> Linux

CLOSE_WAIT ソケット接続を削除するにはどうすればよいですか

CLOSE_WAIT プログラムがまだ実行中であり、ソケットが閉じられていないことを意味します (そして、カーネルは閉じられるのを待っています)。 -p を追加 netstat まで pid を取得し、それをより強力に強制終了します (SIGKILL を使用) 必要に応じて)。 CLOSE_WAIT を取り除く必要があります ソケット。 ps も使用できます pid を見つけます。

SO_REUSEADDR はサーバー用で、TIME_WAIT ソケットなので、ここでは適用しません。


ss で強制的にソケットを閉じることができます 指図; ss command は、ソケット統計をダンプするために使用されるツールであり、netstat と同様の方法で (より単純で高速ですが) 情報を表示します。

CLOSE_WAIT 状態のソケットを強制終了するには、これを (root として) 実行します

$ ss --tcp state CLOSE-WAIT --kill

アクションをフィルタリングすることもできます

$ ss --tcp state CLOSE-WAIT '( dport = 22 or dst 1.1.1.1 )' --kill

クリスト・クラークの説明による。

<ブロック引用>

CLOSE_WAIT は、接続のローカル エンドが相手側から FIN を受信したが、OS はローカル エンドのプログラムが実際に接続を閉じるのを待っていることを意味します。

問題は、ローカル マシンで実行されているプログラムがソケットを閉じていないことです。これは TCP チューニングの問題ではありません。プログラムが接続を開いたままにしている間、接続は (そしてまったく正しく) 永遠に CLOSE_WAIT に留まることができます。

ローカル プログラムがソケットを閉じると、OS はリモート エンドに FIN を送信できます。これにより、FIN の ACK を待つ間、LAST_ACK に移行します。それが受信されると、接続は終了し、接続テーブルから削除されます (終了が CLOSE_WAIT の場合は、そうではありません TIME_WAIT 状態になります)。


Linux
  1. Sbtをアンインストールする方法は?

  2. 方法:Pythonでのソケットプログラミング

  3. すべての Docker コンテナーを削除する方法

  1. 「xx.xxx.xx.xxx への接続が閉じられました」というメッセージを削除するには?

  2. rm を使わずにファイルを削除するには?

  3. UNIXソケット接続のもう一方の端を見つける方法は?

  1. C でソケット接続を完全に破棄する方法

  2. SSH 接続を終了するにはどうすればよいですか?

  3. systemd サービスを削除する方法