Al escribir un código de prueba, he encontrado que Selector.select() puede retornar sin Selector.selectedKeys() que contenga las claves para procesar. Esto está sucediendo en un bucle estrecho cuando registro un canal ed aceptar() conJava NIO select() regresa sin las claves seleccionadas, ¿por qué?
SelectionKey.OP_READ | SelectionKey.OP_CONNECT
como las operaciones de interés.
Según los documentos, seleccione() debe devolver cuando:
1) Hay canales que se puede actuar.
2) Llama explícitamente a Selector.wakeup() - no se han seleccionado teclas.
3) Usted explícitamente Thread.interrupt() el hilo haciendo la selección() - no se seleccionan teclas.
Si no obtengo ninguna clave después de seleccionar() debo estar en los casos (2) y (3). Sin embargo, mi código no está llamando a wakeup() o interrupt() para iniciar estas devoluciones.
¿Alguna idea de qué está causando este comportamiento?
Gracias por la respuesta. Esto es claramente una anomalía en el comportamiento de select, pero es fácilmente solucionable. –
@FrankTaylor No sé por qué un error de programación debe considerarse 'una anomalía en el comportamiento de select '. – EJP