Für einige meiner Java NIO-Verbindungen, wenn ich einen SocketChannel.write(ByteBuffer)
Aufruf habe, wirft es eine IOException
: "Gebrochene Leitung".Java NIO: Was bedeutet IOException: Broken Pipe bedeuten?
Was verursacht ein "gebrochenes Rohr" und, was noch wichtiger ist, ist es möglich, von diesem Zustand zu erholen? Wenn es nicht wiederhergestellt werden kann, scheint dies ein gutes Zeichen zu sein, dass ein irreversibles Problem aufgetreten ist und ich diese Socket-Verbindung einfach schließen sollte. Ist das eine vernünftige Annahme? Gibt es jemals eine Zeit, in der diese IOException
auftreten würde, während die Socket-Verbindung immer noch richtig verbunden ist (anstelle einer funktionierenden Verbindung, die irgendwann fehlgeschlagen ist)?
Auf einer Seite zur Kenntnis, ist es ratsam, immer SocketChannel.isConnected()
aufrufen, bevor eine SocketChannel.write()
versuchen, und wenn ja, kann ich auch davon ausgehen, dass die Verbindung „gebrochen“ und sollte geschlossen werden, wenn beide SocketChannel.isConnected()
und SocketChannel.isConnectionPending()
beide false
sind?
Danke!
Sie können kein kaputtes Rohr erhalten, ohne vorher ein Rohr zu haben. Sie können keine fehlgeschlagene Verbindung erhalten, ohne zuvor eine Verbindung hergestellt zu haben. Der letzte Absatz dieser Antwort ist korrekt, aber irrelevant. – EJP