Quiero usar un SocketChannel
y tener un tiempo de espera para sus métodos de lectura/escritura. He tratado de establecer un tiempo de espera para el zócalo que posee mi SocketChannel
así:El tiempo de espera para SocketChannel no funciona
channel.socket().setSoTimeout(TIMEOUT);
pero que no funciona. hay alguna otra solucion?
Desafortunadamente, SocketChannel no es compatible con el método setSoTimeout directamente. Su uso será tristemente desestimado. – casey
SocketChannel implementa la interfaz InterruptibleChannel, lo que significa que puede crear un hilo separado antes de ingresar a su llamada read(), tener ese otro hilo establecer un temporizador y, cuando expire el temporizador, podría interrumpir el hilo en el que su lectura de SocketChannel() la llamada está bloqueando. Si la llamada de lectura() vuelve primero, puede hacer que mate el hilo del temporizador. –
@StevensMiller Y el canal se cerrará, y la lectura arrojará 'ClosedByInterruptException'. No es muy útil. Me dijeron que esta implementación extraña es obligatoria por el comportamiento de Linux. – EJP