CLOSE_WAIT
significa que su programa aún se está ejecutando y no ha cerrado el socket (y el kernel está esperando que lo haga). Agregar -p
a netstat
para obtener el pid y luego matarlo con más fuerza (con SIGKILL
si es necesario). Eso debería deshacerte de tu CLOSE_WAIT
enchufes También puedes usar ps
para encontrar el pid.
SO_REUSEADDR
es para servidores y TIME_WAIT
enchufes, por lo que no se aplica aquí.
Puede cerrar sockets a la fuerza con ss
dominio; el ss
El comando es una herramienta que se utiliza para volcar estadísticas de socket y muestra información de manera similar (aunque más simple y rápida) a netstat.
Para eliminar cualquier socket en estado CLOSE_WAIT, ejecute esto (como root)
$ ss --tcp state CLOSE-WAIT --kill
También puede filtrar su acción
$ ss --tcp state CLOSE-WAIT '( dport = 22 or dst 1.1.1.1 )' --kill
Como lo describe Crist Clark.
CLOSE_WAIT significa que el extremo local de la conexión ha recibido un FIN del otro extremo, pero el sistema operativo está esperando que el programa en el extremo local realmente cierre su conexión.
El problema es que su programa que se ejecuta en la máquina local no está cerrando el socket. No es un problema de ajuste de TCP. Una conexión puede (y muy correctamente) permanecer en CLOSE_WAIT para siempre mientras el programa mantiene abierta la conexión.
Una vez que el programa local cierra el zócalo, el sistema operativo puede enviar el FIN al extremo remoto que lo transfiere a LAST_ACK mientras espera el ACK del FIN. Una vez que se recibe, la conexión finaliza y se elimina de la tabla de conexiones (si su final está en CLOSE_WAIT, no terminar en el estado TIME_WAIT).