Tengo una aplicación cliente, que utiliza una DLL no administrada para comunicarse con un servidor.¿Cómo cerrar (matar, liberar?) Un socket, que está en estado FIN_WAIT_2?
Todas las operaciones relacionadas con la red están presentes dentro de la dll no administrada. Después de varias operaciones con el servidor, el cliente se está quedando sin puertos TCP. Si comprobamos el estado de netwotk usando 'netstat', obtenemos el siguiente resultado:
...
TCP 192.168.11.55:56048 192.168.10.28:5000 FIN_WAIT_2
TCP 192.168.11.55:56049 192.168.10.28:5000 FIN_WAIT_2
TCP 192.168.11.55:56050 192.168.10.28:5000 FIN_WAIT_2
TCP 192.168.11.55:56051 192.168.10.27:5000 FIN_WAIT_2
TCP 192.168.11.55:56052 192.168.10.28:5000 FIN_WAIT_2
TCP 192.168.11.55:56053 192.168.10.27:5000 FIN_WAIT_2
TCP 192.168.11.55:56054 192.168.10.27:5000 FIN_WAIT_2
TCP 192.168.11.55:56055 192.168.10.27:5000 FIN_WAIT_2
TCP 192.168.11.55:56056 192.168.10.27:5000 FIN_WAIT_2
TCP 192.168.11.55:56057 192.168.10.28:5000 FIN_WAIT_2
TCP 192.168.11.55:56058 192.168.10.27:5000 FIN_WAIT_2
TCP 192.168.11.55:56059 192.168.10.28:5000 FIN_WAIT_2
TCP 192.168.11.55:56060 192.168.10.27:5000 FIN_WAIT_2
...
Los puertos son liberados sólo después de que el cliente se cierra.
Si ejecuto el proyecto VS en el modo de depuración, nunca se agota los puertos. Pero, mientras se ejecuta en modo de lanzamiento, está sucediendo.
Y no tengo acceso ni al servidor ni a la fuente del cliente.
¿Cómo liberar o matar esos puertos que están en estado FIN_WAIT_2?
Configurar el tiempo de espera al valor mínimo ayudó, pero no mucho. Finalmente, pudimos resolver el problema configurando el parámetro TCP_NODELAY en el lado del cliente. Gracias. – ulughbekula
¿qué pasa con mac OS X? –