O CSocket não recebe oClose ou OnReceive quando você desative a conexão de rede no lado do cliente

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

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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top