O proxy Socks5 “Dante” deixa muitos processos filhos presos no estado FIN_WAIT2 / CLOSE_WAIT

1

Estou executando o dante v1.2.1 como um servidor proxy SOCKS. O proxy funciona bem, mas no final do dia existem cerca de 40-50 ou mais processos filhos de execução sockd mesmo que não haja conexões ativas.

lsof mostra que o filho processa todos os soquetes nos estados CLOSE_WAIT e FIN_WAIT2. Esses processos filhos permanecem nesse estado, a menos que eu manualmente mate / reinicie o daemon.

Estou executando o Gentoo Linux em um kernel 2.6.24-23-xen. Eu recentemente atualizei do dante v1.1.19-r4 que estava me dando exatamente o mesmo problema.

Este é um problema de configuração com o Dante, meu sistema, ou é um problema de codificação na fonte dante?

    
por Asad R. 13.06.2010 / 11:52

1 resposta

1

CLOSE_WAIT significa que o outro lado fechou a conexão. O socket será fechado depois que o programa local fechar o descritor de socket. Não há tempo limite para CLOSE_WAIT, portanto, o processo pode ser bloqueado com um soquete neste estado indefinidamente. Quando você mata o processo e seus filhos, eles fecham os soquetes e eles são fechados. Execute lsof e veja se as crianças têm os soquetes abertos. Se o fizerem, então parece um erro no código deles.

Quanto a FIN_WAIT2, é quando o lado local aguarda FIN, ACK do outro lado para confirmar o fechamento da conexão. No entanto, há um tempo limite para todo o sistema nesse estado (consulte /proc/sys/net/ipv4/tcp_fin_timeout ), que é, por padrão, 60s, portanto, nada deve ficar preso nessa fase por mais de um minuto. MAS, se parece que é possível codificar um programa de tal forma que uma conexão semi-fechada pareça ativa para o kernel, então o tempo limite não será ativado. Novamente, parece que você encontrou um inseto.

    
por 25.03.2011 / 21:20