connect () bloqueado por 3 segundos após muito sucesso connect ()

4

Estou escrevendo um aplicativo do lado do cliente que connect() para um servidor e fechá-lo em um loop for.

O connect() é feito no modo de bloqueio e descobri que uma chamada connect() será bloqueada por cerca de 3 segundos após milhares de connect() bem-sucedidos. Eu usei o tcpdump e encontrei algum resultado estranho: depois que chamei o connect() , o SYN não foi enviado por cerca de 3 segundos.

O que aconteceu?

PS. Eu estou no Ubuntu de 64 bits, kernel 3.0.0-13.

    
por fatmck 25.11.2011 / 09:50

1 resposta

4

Provavelmente, você não está chamando bind antes de chamar connect (isso é normal e não há motivo para isso). Portanto, antes de connect , há um bind implícito. Se o intervalo disponível de portas locais estiver esgotado, esse bind poderá ser bloqueado enquanto aguarda uma porta. A melhor solução depende exatamente do que você está tentando fazer. Veja meu comentário para os detalhes que me permitiria sugerir uma solução alternativa.

    
por 27.11.2011 / 03:00