Obtendo notificação de desconexão usando o TCP Keep-Alive no soquete bloqueado de gravação
Eu uso a opção TCP Keep-Alive para detectar conexão inoperante. Funciona bem com conexões que usam soquetes de leitura:
setsockopt(mysock,...) // set various keep alive options
epoll_ctl(ep,mysock,{EPOLLIN|EPOLERR|EPOLLHUP},)
epoll_wait -> (exits after several seconds when remove host disconnects cable)
Epoll wait sai com EPOLLIN | EPOLLHUP no socket sem nenhum problema.
No entanto, se eu tentar escrever muito para o socket até obter EAGAIN e, em seguida, pesquisar para ler e escrever, não recebo um erro quando desligo o cabo:
setsockopt(mysock,...) // set various keep alive options
while(send() != EAGAIN)
;
epoll_ctl(ep,mysock,{EPOLLIN|EPOLLOUT|EPOLERR|EPOLLHUP},)
epoll_wait -> --- Never exits!!!! even when the cable of the remove host is disconnected!!!
como isso pode ser resolvido?Alguém já viu um problema semelhante?Qualquer direção possível?Editar: informação adicional
Quando monito a comunicação com wireshark, no primeiro caso (de leitura) recebo uma vez em vários segundos solicitação de ack. Mas no segundo caso eu não detecto nada.