kum*_*mar 15 sockets linux network-programming tcp
服务器已创建一个套接字并绑定到一个端口,并启动一个循环中的线程来接受该连接.稍后循环由于异常导致线程退出而退出但是套接字仍然限制为端口.现在,如果客户端对此服务器进行"连接",则它会成功.这怎么可能?如果我理解正确,'connect'仅在服务器在侦听套接字上"接受"后返回.我在这里错过了什么吗?
Duc*_*uck 25
如果我理解正确,'connect'仅在服务器在侦听套接字上"接受"后返回.我在这里错过了什么吗?
是.TCP建立连接 - 三次握手 - 在封面下,并在准备就绪时将其放入已完成的连接队列中.Accept()从此队列的前面返回下一个等待连接.
从客户端的角度来看,它是"连接"的,但在服务器接受并开始处理之前,它不会与任何人交谈.有点像你打电话给公司并立即进入保留队列.你是"连接"的,但是在有人真正接听并开始说话之前,不会做任何事情.
您的单个线程可能已经死亡,但进程仍然存在且文件描述符仍然打开,因此TCP不知道应用程序级别发生了什么.