Frage

Wenn Sie eine Steckdose in Java zu erstellen:

new Socket(host, port);

Der Socket-Konstruktor wird versuchen, Host zu verbinden: Port vor der Rückkehr. Unter Windows schlägt fehl dies fast sofort für unerreichbare Hosts aber für Linux auf 5 Minuten für die Socket-Timeout in Anspruch nehmen kann.

Ich bin mir bewusst, dass, wenn ich die Kontrolle habe über die Sockets zu schaffen, was ich tun kann:

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

, aber ich habe lieber das Betriebssystem einen vernünftigen Standardwert verwenden. Gibt es eine Möglichkeit, diese Einstellung auf Linux zu ändern?

Danke

War es hilfreich?

Lösung

Ich glaube, Sie /proc/sys/net/ipv4/tcp_syn_retries wollen. Der Standardwert ist in der Regel 5 oder 6, die etwa 3 Minuten herauskommen.

Beachten Sie, dass diese systemweit.

Andere Tipps

würde ich abraten ändern OS-Einstellungen, wie es unerwartet andere Anwendungen beeinträchtigen könnte. Die Socket.setSoTimeout() Methode könnte auch Ihnen helfen.

Es ist übrigens nicht ganz richtig, dass Linux und Windows hier anders verhalten. Neben den anfänglichen SYN Wiederholungen des Nachbarstaat sowie andere Router senden RST-Pakete auch eine Rolle spielen (die auf Linux und Windows konfiguriert werden können).

Wenn ein Verbindungsversuch auf Windows nicht immediatelly ist es wahrscheinlich, dass es eighter von einem Router oder der Nachbar wurde als nicht erreichbar auf ARP anerkannt RSTed wurde. Versuchen Sie, den arp -a -v Befehl unter Windows die unerreichbaren Hosts zu sehen -., Die schnell abgelehnt bekommen

Für Linux würden Sie ip neigh verwenden, um die Erreichbarkeit Zustand der Stationen in Ihrem lokalen Netzwerk aufzulisten.

Es ist mein Verständnis, dass dies auf der TCP / IP-Standard-Timeout (240 Sekunden standardmäßig?) ... eine Option des Systems abhängt, ist zu versuchen, diese zwicken, was jedoch keine anderen Programme auf der gleichen Maschine beeinträchtigen könnten, die auf die verlassen Timeout-Wert. In diesem Fall könnte es sicherer sein, einfach den „Timeout“ Wert in Ihrem Java-connect () -Aufruf zu senken, statt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top