GNU/Linux >> Linux Esercitazione >  >> Linux

Come rimuovo una connessione socket CLOSE_WAIT

CLOSE_WAIT significa che il tuo programma è ancora in esecuzione e non ha chiuso il socket (e il kernel sta aspettando che lo faccia). Aggiungi -p a netstat per ottenere il pid, e poi ucciderlo con più forza (con SIGKILL se necessario). Questo dovrebbe eliminare il tuo CLOSE_WAIT prese. Puoi anche usare ps per trovare il pid.

SO_REUSEADDR è per server e TIME_WAIT socket, quindi non si applica qui.


Puoi forzare la chiusura dei socket con ss comando; il ss command è uno strumento utilizzato per eseguire il dump delle statistiche sui socket e visualizza le informazioni in modo simile (sebbene più semplice e veloce) a netstat.

Per terminare qualsiasi socket nello stato CLOSE_WAIT, esegui questo (come root)

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

Puoi anche filtrare la tua azione

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

Come descritto da Crist Clark.

CLOSE_WAIT significa che l'estremità locale della connessione ha ricevuto un FIN dall'altra estremità, ma il sistema operativo sta aspettando che il programma all'estremità locale chiuda effettivamente la connessione.

Il problema è che il tuo programma in esecuzione sulla macchina locale non sta chiudendo il socket. Non è un problema di ottimizzazione TCP. Una connessione può (e giustamente) rimanere in CLOSE_WAIT per sempre mentre il programma la mantiene aperta.

Una volta che il programma locale chiude il socket, il sistema operativo può inviare il FIN all'estremità remota che ti passa a LAST_ACK mentre aspetti l'ACK del FIN. Una volta ricevuto, la connessione è terminata e viene eliminata dalla tabella delle connessioni (se la tua estremità è in CLOSE_WAIT non finiscono nello stato TIME_WAIT).


Linux
  1. Come disinstallare SBT?

  2. Come si esce da una connessione SSH?

  3. Come rimuovere i servizi systemd

  4. Come determinare il tempo di connessione del socket su Linux

  5. Come trovare l'altra estremità della connessione socket unix?

Come rimuovere un alias di dominio

Come rimuovere (eliminare) la directory in Linux

Come rimuovere (eliminare) i collegamenti simbolici in Linux

Come rimuovere un comando dalla cronologia in Linux

Come rimuovere il repository remoto Git

Come rimuovere i contenitori Docker