por que o estado da Conexão TCP não está mudando de CLOSE_WAIT para CLOSED?

1

Eu tenho um aplicativo de servidor cliente em execução em: Servidor: servidor Windows 2008 R2 [padrão] Cliente: Windows XP SP3

Fluxo de trabalho: O servidor escuta as conexões do cliente na porta YY. Cliente se conecta ao servidor na porta YY. Os dados são transferidos do servidor para o cliente. Servidor fecha o soquete (com opção de reutilização, TF_REUSE_SOCKET) Cliente fecha o soquete.

Problema: Em cenários normais, quando a transferência de dados é concluída, o servidor fecha o soquete e tudo funciona bem. Mas nos cenários em que o Cliente fecha o soquete primeiro (para cancelar a transferência de dados), o estado do soquete @ server é alterado para CLOSED_WAIT (como o servidor recebe FIN do cliente). No lado do cliente, o estado do soquete em FIN_WAIT_2. Este estado de soquete permanece para sempre. Os soquetes não são liberados.

O mesmo aplicativo funciona bem se o servidor também for o Windows XP XP3.

Existe alguma configuração no Windows2008 R2 que faz com que meu aplicativo não libere o soquete (ou altere o estado do soquete de CLOSED_WAIT)?

Nota: Eu configurei [HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ Tcpip \ Parameters] TcpFinWait2Delay = 60 Mas sem utilidade.

    
por aJ. 30.09.2011 / 14:36

2 respostas

1

O cliente não está recebendo um ACK do servidor para o FIN enviado para o servidor. Eu recomendaria colocar uma captura de pacotes no cliente e no servidor para ver o que está acontecendo.

    
por 30.09.2011 / 16:10
0

O código do servidor está quebrado. Ele não está chamando CloseSocket (ou o equivalente na API que você está usando) e, portanto, seu identificador para a conexão nunca é fechado.

    
por 30.09.2011 / 15:07