可以“连接”调用套接字返回成功,没有服务器调用“接受”?

服务器创build了一个套接字并绑定到一个端口,并启动了一个处于循环中的线程来接受连接。 稍后由于exception导致线程退出而退出循环,但套接字仍然限制到端口。 现在如果客户端连接到这个服务器,它就成功了。 这怎么可能? 如果我理解正确,只有在服务器在接收套接字上“接受”之后,“连接”才会返回。 我在这里错过了什么?

Solutions Collecting From Web of "可以“连接”调用套接字返回成功,没有服务器调用“接受”?"

如果我理解正确,只有在服务器在接收套接字上“接受”之后,“连接”才会返回。 我在这里错过了什么?

是。 TCP建立连接 – 三方握手 – 在准备就绪的情况下将其放入完整的连接队列中。 Accept()从这个队列的前面返回下一个等待的连接。

从客户的角度来看,它是“连接”的,但在服务器接受并开始处理之前,不会与任何人通话。 有点像当你打电话给一个公司,并立即被放入暂停队列。 你是“连接”的,但是直到有人真正拿起并开始说话,才会做生意。

您的个人线程可能已经死亡,但进程仍然活着,文件描述符仍然打开,所以TCP不知道在应用程序级别发生了什么。

连接的套接字进入队列,等待接收过程接受()它们。 这些数据有限,一旦达到,操作系统将开始拒绝连接或忽略连接。