【发布时间】:2016-08-07 05:23:27
【问题描述】:
这是一个非常基本的问题,但我在任何地方都找不到明确的答案:
当我accept() 来自 ServerSocketChannel 的连接时,我是否保证返回的 SocketChannel 是“connected”,或者返回的通道是否仍在执行某种形式的握手或其他任何形式,并且只会在以后设置它的SelectionKey.OP_CONNECT 位?
换句话说,我是否保证以下代码将永远打印 false?
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.socket().bind(new InetSocketAddress(1234));
SocketChannel socketChannel = serverSocketChannel.accept();
System.out.println(socketChannel.isConnected());
【问题讨论】:
-
如果此通道处于非阻塞模式,则如果没有挂起的连接,此方法将立即返回 null。否则它将无限期阻塞,直到有新的连接可用或发生 I/O 错误。 似乎表明它将被连接。
-
@SotiriosDelimanolis “似乎”正是问题所在! ;) 在完全“连接”之前,连接可能已经被认为是“可用的”。也许......我不知道......我希望他们对此更清楚......
标签: java nio socketchannel