como lidar com uma TCP Server perto
-
05-07-2019 - |
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?
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.