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.

questionAnswers(3)

yourAnswerToTheQuestion