Tenemos un programa que escucha en un puerto para recibir información sobre cómo ejecutar un informe. Al cerrar y volver a abrir el programa, nos aparece un error que dice que el puerto que utiliza ya está en uso. Al observar netstat
, vemos que hay 9 instancias de ese puerto en el estado CLOSE_WAIT y 1 instancia en el estado de escucha. La instancia que está en estado de escucha dice que es propiedad del pid 488. El Administrador de tareas muestra que no hay ningún proceso con ese ID y taskkill
dice lo mismo. La aplicación es una aplicación .NET interna.
Este es un entorno de producción, por lo que queremos evitar reiniciar la máquina. ¿Qué podría causar esto y qué se puede hacer para solucionarlo?
Respuesta1
CLOSE_WAIT significa que el socket ha recibido un paquete FIN del otro extremo y está esperando a que la aplicación propietaria de ese socket de escucha lo cierre. No llamar a close() en un socket de escucha puede hacer que flote, como lo hizo en su caso.
Como es una aplicación .NET interna, verificaría nuevamente su código fuente para asegurarme de que el socket esté cerrado () correctamente antes de salir.
Más información sobre los estados de los sockets, incluido CLOSE_WAIT: http://blogs.technet.com/b/janelewis/archive/2010/03/09/explaining-close-wait.aspx