GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menghapus koneksi soket CLOSE_WAIT

CLOSE_WAIT berarti program Anda masih berjalan, dan belum menutup soket (dan kernel sedang menunggu untuk melakukannya). Tambahkan -p ke netstat untuk mendapatkan pid, lalu bunuh dengan lebih kuat (dengan SIGKILL jika diperlukan). Itu akan menghilangkan CLOSE_WAIT Anda soket. Anda juga dapat menggunakan ps untuk menemukan pid.

SO_REUSEADDR adalah untuk server dan TIME_WAIT soket, jadi tidak berlaku di sini.


Anda dapat menutup paksa soket dengan ss memerintah; ss perintah adalah alat yang digunakan untuk membuang statistik soket dan menampilkan informasi dengan cara yang serupa (walaupun lebih sederhana dan lebih cepat) ke netstat.

Untuk mematikan soket apa pun dalam status CLOSE_WAIT, jalankan ini (sebagai root)

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

Anda juga dapat memfilter tindakan Anda

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

Seperti yang dijelaskan oleh Crist Clark.

CLOSE_WAIT berarti ujung sambungan lokal telah menerima FIN dari ujung lainnya, tetapi OS sedang menunggu program di ujung lokal untuk benar-benar menutup sambungannya.

Masalahnya adalah program Anda yang berjalan di mesin lokal tidak menutup soketnya. Ini bukan masalah penyetelan TCP. Koneksi dapat (dan dengan benar) tetap di CLOSE_WAIT selamanya selama program menahan koneksi tetap terbuka.

Setelah program lokal menutup soket, OS dapat mengirim FIN ke ujung jarak jauh yang mentransisikan Anda ke LAST_ACK sementara Anda menunggu ACK dari FIN. Setelah diterima, koneksi selesai dan terputus dari tabel koneksi (jika akhir Anda dalam CLOSE_WAIT, Anda tidak berakhir dalam status TIME_WAIT).


Linux
  1. Bagaimana cara menghapus pesan 'koneksi ke xx.xxx.xx.xxx ditutup'?

  2. Bagaimana menemukan ujung lain dari koneksi soket unix?

  3. Bagaimana cara Membatalkan penghapusan apt-get?

  1. Cara:Pemrograman Socket dengan Python

  2. Cara benar-benar menghancurkan koneksi soket di C

  3. Cara menghapus semua wadah Docker

  1. Bagaimana cara keluar dari koneksi SSH?

  2. Bagaimana cara menghapus layanan systemd

  3. Cara menentukan waktu koneksi soket di Linux