2 Stimmen

Unterbrechung von Threads, die blockiert sind und auf Eingaben von einem Socket warten

Wenn ein Thread unterbrochen wird, während er gleichzeitig die Eingabe eines Socket's InputStream werden die Ressourcen dieses Sockets (z. B. der lokale Port) freigegeben?

Ich weiß, dass der Socket eine Option namens SoTimeout . Wenn ich die SoTimeout wird der Port, an den der Socket gebunden ist, freigegeben, wenn der Timeout abläuft?

4voto

user207421 Punkte 297318
  1. Es gibt nichts, was besagt, dass Thread.interrupt() wird das Lesen unterbrechen überhaupt nicht, geschweige denn die Steckdose schließen, es sei denn, es ist ein InterruptibleChannel in diesem Fall ist die Semantik eindeutig dokumentiert, dass ein ClosedByInterruptException wird ausgelöst und der Kanal wird geschlossen.

  2. Wenn Sie ein Socket-Timeout setzen und eine SocketTimeoutException bleibt die Buchse offen. Keine seiner Ressourcen wird freigegeben (einschließlich des Ports), was bedeutet, dass Sie keinen neuen Socket an diesen Port binden können, bis der Socket geschlossen ist.

2voto

Cameron Skinner Punkte 48467

Durch die Zeitüberschreitung selbst wird weder der Socket geschlossen noch die Bindung des Ports aufgehoben. Sie müssen socket.close() um dies zu erreichen.

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