Acabei de acertar um problema semelhante. (Com lockd
não httpd).
O problema aqui é que seu servidor remoto é aquele que fechou a conexão, com um pacote FIN.
Quando isso acontece, ele coloca a conexão em um estado TIME_WAIT
- que, supostamente, deve ignorar quaisquer pacotes adicionais, caso haja fragmentos adicionais ainda em rota / passando por rotas de rede diferentes.
Portanto, ele está ignorando os pacotes de adição enviados pelo seu aplicativo, até que TIME_WAIT
expire no servidor.
Seu cliente não recebe um ACK
para esses pacotes, então ele retransmite. (Que também são ignorados, até que TIME_WAIT
expire.
Por que ele enviou um pacote FIN? Difícil de dizer. Isso é para o servidor. Mas se você parecia um ataque de negação de serviço, pode ser por isso.
Mas você deve realmente interceptar o estado CLOSE_WAIT
em seu cliente e não reutilizar seu soquete se isso acontecer.