GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie entferne ich eine CLOSE_WAIT-Socket-Verbindung?

CLOSE_WAIT bedeutet, dass Ihr Programm noch läuft und den Socket nicht geschlossen hat (und der Kernel darauf wartet, dass er dies tut). Fügen Sie -p hinzu bis netstat um die PID zu bekommen und sie dann energischer zu töten (mit SIGKILL wenn benötigt). Das sollte Ihren CLOSE_WAIT loswerden Steckdosen. Sie können auch ps verwenden um die PID zu finden.

SO_REUSEADDR ist für Server und TIME_WAIT Sockets, trifft hier also nicht zu.


Sie können Sockets mit ss zwangsweise schließen Befehl; die ss Der Befehl ist ein Werkzeug, das verwendet wird, um Socket-Statistiken auszugeben und Informationen auf ähnliche Weise (obwohl einfacher und schneller) wie netstat anzuzeigen.

Um einen Socket im Status CLOSE_WAIT zu beenden, führen Sie dies (als root) aus

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

Sie können Ihre Aktion auch filtern

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

Wie von Crist Clark beschrieben.

CLOSE_WAIT bedeutet, dass das lokale Ende der Verbindung ein FIN vom anderen Ende empfangen hat, aber das Betriebssystem darauf wartet, dass das Programm am lokalen Ende seine Verbindung tatsächlich schließt.

Das Problem ist, dass Ihr Programm, das auf dem lokalen Computer ausgeführt wird, den Socket nicht schließt. Es handelt sich nicht um ein TCP-Tuning-Problem. Eine Verbindung kann (und ganz richtig) für immer in CLOSE_WAIT bleiben, während das Programm die Verbindung offen hält.

Sobald das lokale Programm den Socket schließt, kann das Betriebssystem das FIN an das entfernte Ende senden, das Sie zu LAST_ACK überführt, während Sie auf das ACK des FIN warten. Sobald dies empfangen wurde, wird die Verbindung beendet und aus der Verbindungstabelle gelöscht (wenn Ihr Ende in CLOSE_WAIT ist, tun Sie dies nicht in den Zustand TIME_WAIT gelangen).


Linux
  1. Wie entferne ich ein Telegramm?

  2. Wie entferne ich die Meldung „Verbindung zu xx.xxx.xx.xxx geschlossen“?

  3. Wie beende ich eine SSH-Verbindung?

  4. So entfernen Sie systemd-Dienste

  5. So bestimmen Sie die Betriebszeit der Socket-Verbindung unter Linux

So entfernen Sie einen Domain-Alias

So entfernen (löschen) Sie das Verzeichnis in Linux

So entfernen (löschen) Sie symbolische Links in Linux

So entfernen Sie einen Befehl aus dem Verlauf in Linux

So entfernen Sie das Git-Remote-Repository

So entfernen Sie Docker-Container