TCP连接的坑总结

一. 关于半关闭和CLOSE_WAIT

客户端主动关闭,发送FIN包。服务端收到FIN,发出ACK,停留在CLOSE_WAIT状态。这个状态持续时间非常长,服务器如果积攒大量的CLOSE_WAIT状态socket,有可能耗尽资源。为什么会产生这样情况?有可能sockfd通过fork被子进程复制了一份,这样该sockfd引用计数为2。在关闭socket时使用close()函数并没有关掉该fd,仅仅是引用计数减1,所以服务端没有向客户端发送FIN,这样就造成了socket处于CLOSE_WAIT状态。解决的办法是:使用shutdown()函数。关于shutdown()函数用法参见:linux网络编程之shutdown() 与 close()函数详解

二. 关于FIN_WAIT2状态

FIN_WAIT2

三. 关于TIME_WAIT状态

这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值