Pergunta

Agora eu tenho um servidor TCP / cliente simples. Eu tenho que configurar para que sempre que um cliente se conecta fica bifurcada () e a ligação em si é colocado em um loop infinito de modo que as estadias conexão aberta. O servidor está recebendo informações do cliente, eu tenho uma verificação para certificar-se que o número de bytes recebidos é> 0. Isso tem funcionado bem até agora para determinar se o cliente foi desconectado. Mas se as servidor desconecta o cliente será desligado também, mas não errno fica definido. Como posso verificar para garantir que o servidor ainda está conectado?

Foi útil?

Solução

Quando a outra extremidade desconecta, o soquete vai se tornar legível (uma leitura no soquete não vai bloquear) eo read() voltará 0. Essa é a maneira usual desconexão for detectada (parece que você está fazendo isso no lado do servidor já).

Se você está bloqueado em uma write() ou tentar write em um socket fechada pelo outro lado, o seu processo vai receber um sinal SIGPIPE e write voltará -1 com o conjunto errno para EPIPE.

A ação padrão para SIGPIPE é terminar o processo, então se você não mudaram, seu cliente só vai morrer quando se tenta escrever para um servidor que foi embora.

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