2010-04-01 12 views
5

El uso de no-bloqueo de E/S, se ve el código para conectarse a una dirección remota algo como:Especificar el tiempo de espera de conexión en java.nio

SocketChannel channel = SelectorProvider.provider().openSocketChannel(); 
channel.configureBlocking(false); 
channel.connect(address); 

El proceso de conexión continuación, tendrá que ser terminado mediante la invocación de finishConnect() el canal cuando algún selector dice la tecla correspondiente isConnectable().

¿Hay alguna forma de especificar el tiempo de espera de la conexión cuando se usa este idioma?

Respuesta

0

Interesante pregunta. No estoy seguro de que el nio mismo proporcione una solución.

En mi experiencia, he ejecutado un Llamado para intentar la conexión, y luego usé el Futuro para sondear una respuesta, usando las variables 'interval' y 'timeout' para repetir y Thread.sleep() para una respuesta .

Esperemos que apunta en una dirección útil ...

Además, le sugiero que tome un vistazo a Apache Mina (se podría describir como un marco Mina nio). Maneja muchas de este tipo de cosas para usted, por ejemplo, en StreamIoHandler http://mina.apache.org/report/trunk/apidocs/org/apache/mina/handler/stream/StreamIoHandler.html

1

La pregunta en realidad no tiene sentido. Los tiempos de espera son para el modo de bloqueo. Si quieres eso, deja el canal en modo de bloqueo y llama al channel.socket().connect(address, timeout);. Si quiere un modo sin bloqueo, use su código actual; luego crea un Selector; registrar el canal para OP_CONNECT; cuando lo reciba, llame al finishConnect(), y si eso devuelve true, registre el registro OP_CONNECT y continúe con el resto de su código.

Cuestiones relacionadas