如何设置连接Java NIO非阻塞套接字时的超时?

如何设置连接Java NIO非阻塞套接字时的超时?,java,sockets,nio,nonblocking,Java,Sockets,Nio,Nonblocking,我想设置连接超时 我找到了一些解决方案,但每个答案都是读或写超时 下面是我的代码 InetSocketAddress socketAddress = new InetSocketAddress(host, port);//set socket address selector = Selector.open(); socketChannel = SocketChannel.open(socketAddress);//default connect timeout is 20sec socketC

我想设置连接超时

我找到了一些解决方案,但每个答案都是读或写超时

下面是我的代码

InetSocketAddress socketAddress = new InetSocketAddress(host, port);//set socket address
selector = Selector.open();
socketChannel = SocketChannel.open(socketAddress);//default connect timeout is 20sec
socketChannel.configureBlocking(false);
socketChannel.register(selector,  SelectionKey.OP_READ);
我想将超时设置为“SocketChannel.open(socketAddress)”


我能为它做些什么?

连接超时似乎仅适用于阻塞模式:使用no arg open方法创建SocketChannel,将其配置为非阻塞,调用connect。如果connect返回false,则不会立即建立连接,在这种情况下,请向op_connect的选择器注册连接,然后使用所需的超时调用select。是的,这有点复杂,但这是因为通道API是低级/高级API。当然,另一种方法是使用套接字适配器,即使用no arg open方法创建,然后调用socketChannel.socket().connect(…)使用timeout连接是否仅为连接超时阻塞模式?我想我必须找到它似乎连接超时仅用于阻塞模式:使用no arg open方法创建SocketChannel,将其配置为非阻塞,调用connect。如果connect返回false,则不会立即建立连接,在这种情况下,请向op_connect的选择器注册连接,然后使用所需的超时调用select。是的,这有点复杂,但这是因为通道API是低级/高级API。当然,另一种方法是使用套接字适配器,这意味着使用no arg open方法创建,然后调用socketChannel.socket().connect(…)来连接timeoutis connection timeout阻塞模式?我想我必须找到它