2 Stimmen

Java Socket Timeout Verhalten

Wenn ich bei Java-Sockets die soTimeout festlege, wie wird sich das Verhalten im Falle von aktiven Peer vs. passiven Peer verhalten? Wenn ich z.B. einen readtimeout-Wert von 1 Minute habe und eine Dateiübertragung durchführe, die 5 Minuten dauert, wird es dann eine readtimeout-Ausnahme geben oder nicht? Für mich ist es wichtig, eine Timeout-Ausnahme zu erhalten, wenn die Verbindung hängt.

3voto

Perception Punkte 78008

Die Einstellung soTimeout betrifft explizit Operationen, die vom Eingabestrom des Sockets lesen. Man kann es sich vorstellen, als würde der Aufrufer einen zeitgesteuerten Block für Leseoperationen definieren. Aus der Javadoc für setSoTimeout:

SO_TIMEOUT mit dem angegebenen Timeout in Millisekunden aktivieren/deaktivieren. Wenn diese Option auf einen nicht-nullen Timeout gesetzt ist, wird ein Aufruf von read() auf dem InputStream, der mit diesem Socket verbunden ist, nur für diese Zeitdauer blockieren. Wenn der Timeout abläuft, wird eine java.net.SocketTimeoutException ausgelöst, obwohl der Socket immer noch gültig ist.

Im Fall eines passiven Peers wird kein Timeout allein aufgrund des nicht Aufrufs von read ausgelöst. Wenn es jedoch irgendwann einen read-Aufruf macht, muss der Aufruf Daten zurückgeben, bevor der soTimeout abläuft, ansonsten wird eine SocketTimeoutException ausgelöst.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X