Pregunta

Al crear un Socket en Java:

new Socket(host, port);

El constructor de Socket intentará conectarse a host: puerto antes de regresar. En Windows, esto falla casi de inmediato para hosts inaccesibles, pero para Linux puede tomar hasta 5 minutos para que el Socket se agote.

Soy consciente de que si tengo control sobre la creación de Sockets, puedo hacer:

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

pero prefiero que el sistema operativo use un valor predeterminado razonable. ¿Hay alguna manera de cambiar esta configuración en Linux?

Gracias

¿Fue útil?

Solución

Creo que quieres /proc/sys/net/ipv4/tcp_syn_retries. El valor predeterminado suele ser 5 o 6, lo que equivale a unos 3 minutos.

Tenga en cuenta que estos son de todo el sistema.

Otros consejos

Recomendaría no cambiar la configuración del sistema operativo, ya que podría afectar a otras aplicaciones inesperadamente. El método Socket.setSoTimeout() también puede ayudarlo.

No es del todo correcto, Linux y Windows se comportan aquí de manera diferente. Además de los reintentos iniciales SYN (que se pueden configurar en Linux y Windows), el estado vecino y otros enrutadores que envían paquetes RST también juegan un papel importante.

Si un intento de conexión en Windows falla de inmediato, es probable que haya sido más RSTed por un enrutador o que el vecino haya sido reconocido como inalcanzable a nivel ARP. Pruebe el comando arp -a -v en Windows para ver los hosts inaccesibles, que se rechazan rápidamente.

Para Linux, usaría ip neigh para enumerar el estado de accesibilidad de las estaciones en su red local.

Tengo entendido que esto depende del tiempo de espera predeterminado de TCP / IP del sistema (¿240 segundos por defecto?) ... una opción es intentar ajustarlos, sin embargo, esto podría afectar a cualquier otro programa en la misma máquina que dependa de valor de tiempo de espera En ese caso, podría ser más seguro simplemente bajar el & Quot; timeout & Quot; valor en su llamada Java connect (), en su lugar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top