Pergunta

Cliente perto da tomada primeiro, quando não há muitos dados a partir de servidor, conexão TCP desligamento é bem assim:

FIN -->
   <-- ACK
   <-- FIN, ACK
ACK -->

Quando o servidor está ocupando o envio de dados:

FIN -->
    <-- ACK,PSH
RST -->

E a conexão do servidor trata de estado CLOSE_WAIT e pendurar lá por um longo tempo.

Qual é o problema aqui? cliente relacionado ou servidor relacionados? Isso acontece em Redhat5 para sockets locais.

Este artigo falar sobre o porquê "RST" é enviado, mas eu não sei por que a conexão do servidor preso em CLOSE_WAIT, e não enviar um a FIN.

[EDIT] Eu ignorei as informações mais importantes, isso acontece em qemu de emulação de rede slirp. Parece ser um problema de bug slirp para lidar com estreita ligação.

Foi útil?

Solução 3

Este é um conhecido defeito para qemu.

Outras dicas

Isto significa que há dados não lidas deixadas em na corrente, que o cliente não tem leitura final.

Você pode forçá-lo fora usando a opção SO_LINGER. Aqui está documentação relevante para Linux (veja também a opção em si, aqui ), e [aqui está o function2 correspondência] para Win32

É o lado do servidor que está permanecendo aberta, por isso é no lado do servidor você pode tentar desativar SO_LINGER.

Isso pode significar que o servidor não tenha fechado o socket. Você pode facilmente dizer isso usando "lsof" para listar o arquivo descritores abrir por esse processo que irá incluir sockets TCP. A correção é ter o processo sempre perto da tomada quando terminar (mesmo em casos de erro etc)

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