繁体   English   中英

在没有服务器调用'accept'的情况下,可以在套接字上成功“连接”调用吗

[英]Can 'connect' call on socket return successfully without server calling 'accept'?

服务器已创建一个套接字并绑定到一个端口,并启动一个循环中的线程来接受该连接。 稍后循环由于异常导致线程退出而退出但是套接字仍然限制为端口。 现在,如果客户端对此服务器进行“连接”,则它会成功。 这怎么可能? 如果我理解正确,'connect'仅在服务器在侦听套接字上“接受”后返回。 我在这里错过了什么吗?

如果我理解正确,'connect'仅在服务器在侦听套接字上“接受”后返回。 我在这里错过了什么吗?

是。 TCP建立连接 - 三次握手 - 在封面下,并在准备就绪时将其放入已完成的连接队列中。 Accept()从此队列的前面返回下一个等待连接。

从客户端的角度来看,它是“连接”的,但在服务器接受并开始处理之前,它不会与任何人交谈。 有点像你打电话给公司并立即进入保留队列。 你是“连接”的,但是在有人真正接听并开始说话之前,不会做任何事情。

您的单个线程可能已经死亡,但进程仍处于活动状态且文件描述符仍处于打开状态,因此TCP不知道应用程序级别发生了什么。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM