RSH fechando o socket stderr com um atraso?

0

Ambiente: CentOS 6.6

Ao executar este teste simples (de myclient ):

while true; do rsh myserver "echo OK"; done

Após ~ 500 iterações, o servidor fica sem portas.

netstat -anp no servidor mostra:

tcp        0      0 myserver:1008              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:975               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:998               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:991               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1007              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1000              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:990               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:979               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1003              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:988               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:984               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1002              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:997               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1019              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:995               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:993               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1004              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1017              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1013              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1011              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1009              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:994               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:987               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:986               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1012              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1010              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1014              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:996               myclient:922              TIME_WAIT   -

922 é a porta stderr do RSH (do monitoramento com wireshark).

Após aproximadamente um minuto, os soquetes são fechados no servidor e novas conexões podem ser feitas.

Portanto, parece que o cliente ou o servidor não consegue fechar adequadamente esses soquetes e eles acabam o tempo limite.

Isso é um bug no rsh?

Alguma ideia para contornar isso? Eu posso ver que o rsh do BSD tem uma opção --no-stderr , mas o Linux não parece.

    
por nicoulaj 24.02.2016 / 12:45

1 resposta

1

Acerte isso antes na minha vida ... o TIME_WAIT é um artefato do TCP / IP, então você está preso a ele. Ele pode ser ajustado via / proc (consulte serverfault 23385 ) mas uma maneira melhor seria uma solução que abrisse um soquete persistente que funcionasse o tempo que fosse necessário.

  generate_lots_of_lines | ssh myhost 'while read line; do echo ":$line"; done;'

Dessa forma, você pode ter uma conexão para fazer muitas coisas com base no que o cliente envia ao servidor.

    
por 17.09.2016 / 02:59