Ich möchte eine SocketChannel
verwenden und ein Timeout für seine Lese-/Schreibmethoden haben. Ich habe versucht, ein Timeout für den Sockel gesetzt, dass meine SocketChannel
wie diese besitzt:Timeout für SocketChannel funktioniert nicht
channel.socket().setSoTimeout(TIMEOUT);
aber das funktioniert nicht. Gibt es eine andere Lösung?
SocketChannel unterstützt die setSoTimeout-Methode leider nicht direkt. Die Verwendung wird leider vernachlässigt. – casey
SocketChannel implementiert die InterruptibleChannel-Schnittstelle, was bedeutet, dass Sie vor dem Aufruf Ihres read() -Aufrufs einen separaten Thread erstellen konnten, der andere Thread einen Timer gesetzt hat und nach Ablauf des Timers den Thread, in dem Ihr SocketChannel read() Anruf blockiert. Wenn der Aufruf read() zuerst zurückkehrt, könnte der Timer-Thread beendet werden. –
@StevensMiller Und der Kanal wird geschlossen, und das Lesen wird 'ClosedByInterruptException.' werfen. Nicht sehr nützlich. Mir wurde gesagt, dass diese bizarre Implementierung durch das Verhalten von Linux bedingt ist. – EJP