GNU/Linux >> Znalost Linux >  >> Linux

Jak odeberu připojení soketu CLOSE_WAIT

CLOSE_WAIT znamená, že váš program stále běží a neuzavřel socket (a jádro na to čeká). Přidejte -p do netstat získat pid a pak ho zabít důrazněji (pomocí SIGKILL V případě potřeby). Tím byste se měli zbavit CLOSE_WAIT zásuvky. Můžete také použít ps najít pid.

SO_REUSEADDR je pro servery a TIME_WAIT zásuvky, takže zde neplatí.


Zásuvky můžete násilně uzavřít pomocí ss příkaz; ss command je nástroj používaný k výpisu statistik soketů a zobrazuje informace podobným způsobem (ač jednodušším a rychlejším) jako netstat.

Chcete-li ukončit jakýkoli soket ve stavu CLOSE_WAIT, spusťte toto (jako root)

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

Svou akci můžete také filtrovat

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

Jak popsal Crist Clark.

CLOSE_WAIT znamená, že místní konec připojení přijal aFIN z druhého konce, ale operační systém čeká, až program na místním konci skutečně uzavře své připojení.

Problém je v tom, že váš program běžící na místním počítači neuzavírá soket. Nejedná se o problém ladění TCP. Připojení může (a zcela správně) zůstat v CLOSE_WAIT navždy, zatímco program udržuje připojení otevřené.

Jakmile místní program uzavře soket, OS může poslat FIN na vzdálený konec, který vás přepne na LAST_ACK, zatímco budete čekat na ACK FIN. Po přijetí je připojení dokončeno a odpadne z tabulky připojení (pokud je váš konec v CLOSE_WAIT, ne skončí ve stavu TIME_WAIT).


Linux
  1. Jak odstranit telegram?

  2. Jak na to:Programování soketů v Pythonu

  3. Jak úplně zničit připojení zásuvky v C

  1. Jak odstranit všechny kontejnery Docker

  2. Jak odstranit zprávu „Připojení k xx.xxx.xx.xxx uzavřeno“?

  3. Jak ukončím připojení SSH?

  1. Jak odstranit systémové služby

  2. Jak určit dobu připojení soketu v systému Linux

  3. Jak odstranit soubor bez použití rm?