Cuando un cliente inicia una desconexión del servidor, se produce un intercambio entre cliente y servidor para informar sobre el estado de la desconexión. Cuando el proceso termina, la conexión del socket del cliente queda en TIME_WAIT durante un tiempo variable. Es un comportamiento normal; en los sistemas operativos Windows, este tiempo es de unos 4 minutos por defecto.
Puedes reducir o eliminar este comportamiento, con cuidado, usando las siguientes alternativas.
Regedit
Puedes reducir el valor de TIME_WAIT mediante el Regedit de Windows
1. Abre Regedit y accede a las subclaves del registro HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters.
2. Crea un nuevo valor REG_DWORD llamado TcpTimedWaitDelay.
3. Establece el valor en segundos. Ejemplo: si pones un valor de 5, TIME_WAIT esperará como máximo 5 segundos.
4. Guarda y reinicia el sistema.
LINGER
Otra opción para evitar el estado TIME_WAIT es usar la opción de socket SO_LINGER; si está activada, en lugar de cerrar la conexión de forma ordenada, el cliente la resetea, evitando así el estado TIME_WAIT.
Puedes activar esta opción con la propiedad LingerState; por defecto tiene el valor -1. Si la pones a cero, la conexión se reseteará al desconectarse del socket sin Timeout.
Esta es probablemente la opción menos recomendable y solo debería usarse como último recurso.
