none
Conexão presa RRS feed

  • Pergunta

  • Olá,

    Estou desenvolvendo um aplicativo para receber arquivos remotos via TCP Sockets. Está tudo funcionando perfeitamente em situações normais, porém se eu colocar para enviar um arquivo grande e fechar o cliente no meio da transmissão, a conexão no servidor fica presa (não recebe o
    CLOSE_WAIT ou CLOSED) e no netstat fica como ESTABLISHED.

    Programei uma função de timeout baseada no tempo do último pacote recebido mas não sei se isso é o correto a se fazer, já que a conexão deveria ser encerrada logo quando o cliente fosse fechado. Se eu fecho o cliente sem estar transmitindo nada, o servidor encerra normalmente a conexão.

    Estou usando IOCP e para identificar o fim da conexão eu verifico se o valor de lpNumberOfBytesTransferred da função GetQueuedCompletionStatus é igual a 0.

    Qualquer ajuda será apreciada.

    Obrigado.

    quinta-feira, 19 de abril de 2012 22:22

Todas as Respostas

  • Acredito ter descoberto o motivo de a conexão ficar "presa". Removi os valores "TcpAckFrequency" e "TCPNoDelay" do Registro do Windows de meu servidor e agora em qualquer momento que eu interrompa a transferência de arquivos, a conexão é encerrada normalmente. De qualquer forma vou manter a função de timeout para evitar inconvenientes.
    sexta-feira, 20 de abril de 2012 03:57