CSocket no recibe OnClose o OnReceive cuando se deshabilita la conexión de red en el lado del cliente

StackOverflow https://stackoverflow.com/questions/1908634

  •  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!

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top