三次握手目的是:保证双方都准备好资源。
三次握手:
客户端告诉服务端准备好资源
服务端告诉客户端,我准备好了,你准备好了?
我也准备好了
四次挥手是:保证双方都把资源释放掉。
四次挥手过程:
第一次调用close()发送了一个数据包,然后得回一个,这个时候客户端知道服务端收到了,第二次用recv解阻塞,有数据就处理,第三次没有数据就关闭,调用close关闭就会向对方发送一个数据包,第四次客户端回复。
为什么是四次挥手而不是三次挥手
因为不调用第三次挥手的close就不能得到回复。
服务端为什么不能先调用close?
客户端先调用等两分钟随机分配再连再分配。
服务器先调用不允许绑定端口,会出现 端口被占用,
怎么解决服务端调用close()不被占用?
设置套接字选项
setsockopt 套接字选项,REUSEADDR重复利用资源解决端口调用。