首页 文章

可以在没有服务器调用'accept'的情况下成功调用套接字'connect'吗?

提问于
浏览
12

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

2 回答

  • 4

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

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

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

    您的单个线程可能已经死亡,但进程仍然存在且文件描述符仍然打开,因此TCP不知道应用程序级别发生了什么 .

  • 21

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

相关问题