GNU/Linux >> Tutoriels Linux >  >> Linux

Comment supprimer une connexion de socket CLOSE_WAIT

CLOSE_WAIT signifie que votre programme est toujours en cours d'exécution et n'a pas fermé le socket (et que le noyau attend qu'il le fasse). Ajouter -p à netstat pour obtenir le pid, puis tuez-le avec plus de force (avec SIGKILL si besoin). Cela devrait vous débarrasser de votre CLOSE_WAIT prises. Vous pouvez également utiliser ps pour trouver le pid.

SO_REUSEADDR est pour les serveurs et TIME_WAIT sockets, donc ne s'applique pas ici.


Vous pouvez forcer la fermeture des sockets avec ss commande; le ss La commande est un outil utilisé pour vider les statistiques des sockets et affiche les informations de la même manière (bien que plus simple et plus rapide) que netstat.

Pour tuer n'importe quel socket dans l'état CLOSE_WAIT, exécutez ceci (en tant que root)

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

Vous pouvez également filtrer votre action

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

Tel que décrit par Crist Clark.

CLOSE_WAIT signifie que l'extrémité locale de la connexion a reçu un FIN de l'autre extrémité, mais que le système d'exploitation attend que le programme à l'extrémité locale ferme réellement sa connexion.

Le problème est que votre programme exécuté sur la machine locale ne ferme pas le socket. Ce n'est pas un problème de réglage TCP. Une connexion peut (et tout à fait correctement) rester en CLOSE_WAIT indéfiniment pendant que le programme maintient la connexion ouverte.

Une fois que le programme local ferme le socket, le système d'exploitation peut envoyer le FIN à l'extrémité distante qui vous fait passer à LAST_ACK pendant que vous attendez l'ACK du FIN. Une fois que cela est reçu, la connexion est terminée et disparaît de la table de connexion (si votre fin est dans CLOSE_WAIT, vous ne le faites pas finir dans l'état TIME_WAIT).


Linux
  1. Guide pratique :programmation de sockets en Python

  2. Comment quitter une connexion SSH ?

  3. Comment supprimer les services systemd

  4. Comment déterminer le temps de connexion du socket sous Linux

  5. Comment supprimer un fichier sans utiliser rm ?

Comment supprimer un alias de domaine

Comment supprimer (supprimer) le répertoire sous Linux

Comment supprimer (supprimer) des liens symboliques sous Linux

Comment supprimer une commande de l'historique sous Linux

Comment supprimer le référentiel distant Git

Comment supprimer les conteneurs Docker