最近写了一个测试程序,对于TCP方面协议以及套接字接口方面的调用有了更进一步的认识。特此记录下来。
对于监听套接字,它会有一个监听队列。调用listen函数设置,众所周知,TCP连接需要三次握手,握手成功后,会添加到这个队列中,所以我们要通过accpet函数及时取出来,如果队列处于满状态,这个时候在调用connect函数,服务端会处于等待状态,连接超时。所以我测试程序并发1000个连接,会出现连接失败的情况。
关于断开和连接相关时序图:画一个图来演示一下。
当三次握手成功后,服务器端会将该连接投入就绪队列中,这个时候调用accpet将他快速的取出来,直到返回值为-1,errno为eagain。如果这个时候如果再来一个连接,但是就绪队列已经满。无法正常完成三次握手,服务端直接返回RST包,代表连接超时,所以一定要快速取出来。