Wie kann Socket Connection Timeout auf Linux angezeigt / geändert werden?

8

Beim Erstellen eines Sockets in Java:

%Vor%

Der Socket-Konstruktor versucht, eine Verbindung zu host: port herzustellen, bevor er zurückkehrt. Bei Windows schlägt dies fast sofort bei nicht erreichbaren Hosts fehl, aber bei Linux kann es bis zu 5 Minuten dauern, bis der Socket abgelaufen ist.

Ich bin mir bewusst, dass ich, wenn ich die Kontrolle über die Erstellung der Sockets habe, Folgendes tun kann:

%Vor%

Ich möchte aber lieber, dass das Betriebssystem einen vernünftigen Standardwert verwendet. Gibt es eine Möglichkeit, diese Einstellung unter Linux zu ändern?

Danke

    
Kevin 25.06.2009, 20:09
quelle

4 Antworten

7

Ich denke du willst /proc/sys/net/ipv4/tcp_syn_retries . Der Standardwert ist normalerweise 5 oder 6, was ungefähr 3 Minuten beträgt.

Beachten Sie, dass diese systemweit sind.

    
Duck 25.06.2009, 20:49
quelle
4

Ich rate davon ab, die Betriebssystemeinstellungen zu ändern, da dies möglicherweise andere Anwendungen beeinträchtigen könnte. Die Methode Socket.setSoTimeout() könnte Ihnen ebenfalls helfen.

    
akarnokd 25.06.2009 20:56
quelle
2

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

Wenn ein Verbindungsversuch unter Windows sofort fehlschlägt, ist es wahrscheinlich, dass die Verbindung von einem Router zu RST verbessert wurde oder dass der Nachbar auf ARP-Ebene als nicht erreichbar erkannt wurde. Probieren Sie den Befehl arp -a -v unter Windows aus, um die nicht erreichbaren Hosts zu sehen, die schnell zurückgewiesen werden.

Unter Linux würden Sie ip neigh verwenden, um den Erreichbarkeitsstatus von Stationen in Ihrem lokalen Netzwerk aufzulisten.

    
eckes 08.09.2011 03:24
quelle
0

Es hängt davon ab, dass dies vom TCP / IP-Standard-Timeout des Systems abhängt (240 Sekunden standardmäßig?) ... eine Option ist es, diese zu optimieren, aber dies könnte andere Programme auf dem gleichen Rechner betreffen, die auf dem Zeitlimitwert In diesem Fall ist es möglicherweise einfacher, den Wert für die Zeitüberschreitung in Ihrem Java-Aufruf connect () zu verringern.

    
DreadPirateShawn 25.06.2009 20:36
quelle

Tags und Links