Pregunta:
Quiero cerrar un puerto abierto que está en modo de escucha entre mi cliente y la aplicación del servidor.
¿Existe alguna opción de línea de comando manual en Linux para cerrar un puerto?
NOTA: Llegué a saber que "solo la aplicación propietaria del socket conectado debe cerrarlo, lo que sucederá cuando finalice la aplicación".
No entiendo por qué solo es posible mediante la aplicación que lo abre … Pero todavía estoy ansioso por saber si hay alguna otra forma de hacerlo.
Respuesta:
Tuve el mismo problema, el proceso debe mantenerse vivo pero el socket debe cerrarse. Cerrar un socket en un proceso en ejecución no es imposible, pero sí difícil:
-
localizar el proceso:
netstat -np
Obtiene una
source/destination ip:port portstate pid/processname
mapa -
localizar el descriptor de archivo del socket en el proceso
lsof -np $pid
Obtiene una lista: nombre de proceso, pid, usuario, fileDescriptor, … una cadena de conexión.
Busque el número de fileDescriptor correspondiente para la conexión. Será algo así como "97u" que significa "97".
-
Ahora conecta el proceso:
gdb -p $pid
-
Ahora cierra el enchufe:
call close($fileDescriptor) //does not need ; at end.
ejemplo:
call close(97)
Luego separe gdb:
quit
Y el enchufe está cerrado.