gpt4 book ai didi

java - ServerSocketChannel.accept() 返回的SocketChannel 是否保证连接?

转载 作者:行者123 更新时间:2023-11-29 04:43:52 26 4
gpt4 key购买 nike

这是一个非常基本的问题,但我在任何地方都找不到明确的答案:

当我 accept()来自 ServerSocketChannel 的连接,我是否保证返回的 SocketChannel 是“connected”,或者是否会发生返回的 channel 仍在执行某种形式的握手或其他任何形式,并且只会在稍后设置其 SelectionKey.OP_CONNECT位?

换句话说,我是否保证以下代码永远不会打印false

ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.socket().bind(new InetSocketAddress(1234));
SocketChannel socketChannel = serverSocketChannel.accept();
System.out.println(socketChannel.isConnected());

最佳答案

根据ServerSocketChannelImpl的来源ServerSocketChannelImpl 创建一个 SocketChannelImpl状态为 ST_CONNECTED。

SocketChannelImpl.isConnected()方法检查 ST_CONNECTED 状态,您的测试应始终返回 true。

然而,这就是美好时光的场景。可能发生的情况是您的服务器线程被延迟,并且在您的线程调用 isConnected() 时客户端已经关闭了连接。

所以,不,不能保证您的代码永远不会打印错误。

关于java - ServerSocketChannel.accept() 返回的SocketChannel 是否保证连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38059207/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com