Para algunas de mis conexiones Java NIO, cuando tengo una llamada SocketChannel.write(ByteBuffer)
, arroja un IOException
: "Tubo roto".Java NIO: ¿Qué significa IOException: Broken pipe?
¿Qué causa una "tubería rota" y, lo que es más importante, ¿es posible recuperarse de ese estado? Si no se puede recuperar, parece que esto sería una buena señal de que ha ocurrido un problema irreversible y que simplemente debería cerrar esta conexión de socket. ¿Es eso una suposición razonable? ¿Hay alguna vez en que ocurra esto IOException
mientras la conexión de socket todavía se está conectando correctamente en primer lugar (en lugar de una conexión que funciona que falló en algún momento)?
En una nota lateral, es prudente llamar siempre a SocketChannel.isConnected()
antes de intentar una SocketChannel.write()
, y si es así, ¿puedo suponer que la conexión está "roto" y debe ser cerrada si tanto SocketChannel.isConnected()
y SocketChannel.isConnectionPending()
son tanto false
?
Gracias!
No se puede obtener una tubería rota sin antes haber tenido una tubería. No puede obtener una conexión fallida sin haber tenido previamente una conexión. El último párrafo de esta respuesta es correcto pero irrelevante. – EJP