Pergunta

Ao criar um Socket em Java:

new Socket(host, port);

O construtor soquete vai tentar se conectar ao host: port , antes de retornar. No Windows, isso falhar quase imediatamente para os anfitriões inacessíveis mas para Linux pode levar até 5 minutos para que a tomada de tempo limite.

Estou ciente de que se eu tiver controle sobre a criação de Sockets, eu posso fazer:

Socket s = new Socket();
s.bind(..);
s.connect(.., timeout);

mas eu prefiro ter o uso OS um valor padrão razoável. Existe uma maneira de mudar essa configuração no Linux?

Graças

Foi útil?

Solução

Eu acho que você quer /proc/sys/net/ipv4/tcp_syn_retries. O padrão é geralmente 5 ou 6, que sai a cerca de 3 minutos.

Note que estes são de todo o sistema.

Outras dicas

Gostaria de aconselhar contra a alteração das configurações do sistema operacional, uma vez que pode afectar outras aplicações de forma inesperada. O método Socket.setSoTimeout() pode ajudá-lo também.

É BTW não é inteiramente correcto, que o Linux e Windows se comportar aqui de forma diferente. Além das tentativas de SYN iniciais (que podem ser configuradas em Linux e Windows) no estado vizinho, bem como outros roteadores enviando pacotes RST também desempenham um papel.

Se uma tentativa de conexão no Windows falhar immediatelly é provável que ele foi eighter RSTed por um roteador ou o vizinho foi reconhecido como inacessível no nível de ARP. Tente o comando arp -a -v no Windows para ver os anfitriões inacessíveis -. Que ter rejeitado rapidamente

Para Linux você usaria ip neigh para listar o estado acessibilidade das estações em sua rede local.

É o meu entendimento de que isso depende de tempo limite padrão TCP / IP do sistema (240 segundos por padrão?) ... uma opção é tentar ajustar esses, no entanto, isso pode afetar quaisquer outros programas na mesma máquina que dependem da valor do tempo limite. Nesse caso, pode ser mais seguro do que simplesmente reduzir o valor "tempo de espera" na sua chamada Java connect (), em vez disso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top