O CSocket não recebe oClose ou OnReceive quando você desative a conexão de rede no lado do cliente
-
19-09-2019 - |
Pergunta
Eu criei um aplicativo de servidor cliente com C ++ CSocket. Quando conecto o cliente ao servidor e, depois disso, fecho o cliente com o botão X normal ou a tarefa final com o TaskManager, o servidor CSocket recebe o evento ONCLOSE. O problema é quando desabilito a conexão com a Internet no Windows em que o cliente está em execução, o servidor CSocket não recebe o OCLOSE nem o evento OnReceive!
Alguém pode saber o que está acontecendo?
ATUALIZAÇÃO: Acabei de testar e vi que o cliente também não recebeu o OnClose! Desativei a conexão com a Internet no Windows em que o cliente está em execução!
Solução
O lado do cliente é desligado sem poder fechar a conexão com o servidor por meio de uma barbatana ou primeira. Para que o servidor detecte que o cliente está morto, ele deve ter dados a serem enviados (que falhariam) ou que devem enviar sondas de manutenção de TCP periódicas. TCP_KEEPALIVE
pode ser definido como uma opção de soquete.