CSocket no recibe OnClose o OnReceive cuando se deshabilita la conexión de red en el lado del cliente
-
19-09-2019 - |
Pregunta
He creado una aplicación cliente-servidor con C ++ CSocket. cuando conecto el cliente al servidor y después de eso cierro el cliente con el botón normal de X o tarea final, con el administrador de tareas, CSocket servidor recibe el evento OnClose. El problema es cuando desactivo la conexión a Internet en las ventanas que el cliente se ejecuta en, CSocket servidor no recibe el evento OnClose ni OnReceive!
¿Es posible que alguien sepa lo que está pasando?
Actualización: Acabo probé y vi que el cliente no reciba el OnClose también! He desactivado la conexión a internet en las ventanas que el cliente se ejecuta en!
Solución
El lado del cliente se cierra sin ser capaz de cerrar la conexión con el servidor a través de una aleta o RST. Para que el servidor detecta que el cliente está muerto tiene que o bien tienen datos para enviar (que sería un fracaso) o debe enviar sondas periódicas de mantenimiento de conexión TCP. TCP_KEEPALIVE
se puede configurar como una opción de socket.