首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

浅谈CLOSE_WAIT

所谓 CLOSE_WAIT,借用某位大牛的话来说应该倒过来叫做 WAIT_CLOSE,也就是说「等待关闭」,如果你还不理解其含义,可以看看 TCP 关闭连接时的图例: TCP Close 不要被图中的...通常,CLOSE_WAIT 状态在服务器停留时间很短,如果你发现大量的 CLOSE_WAIT 状态,那么就意味着被动关闭的一方没有及时发出 FIN 包,一般有如下几种可能: 程序问题:如果代码层面忘记了...close 相应的 socket 连接,那么自然不会发出 FIN 包,从而导致 CLOSE_WAIT 累积;或者代码不严谨,出现死循环之类的问题,导致即便后面写了 close 也永远执行不到。...那么为什么我们总听说 CLOSE_WAIT 状态过多的故障,但是却相对少听说 FIN_WAIT2 状态过多的故障呢?...坏消息是 CLOSE_WAIT 没有类似的设置,如果不重启进程,那么 CLOSE_WAIT 状态很可能会永远持续下去;好消息是如果 socket 开启了 keepalive 机制,那么可以通过相应的设置来清理无效连接

3.8K21

从linux源码看socket的close

fd)又是通过系统调用sys_close来执行的: asmlinkage long sys_close(unsigned int fd) { // 清除(close_on_exec即退出进程时)的位图标记...上图中红色线标注的是close(fd)的调用链 tcp_close void tcp_close(struct sock *sk, long timeout) { if (sk->sk_state =...last_ack 应用层在发现对端关闭之后已经是close_wait状态,这时候再调用close的话,会将状态改为last_ack状态,并发送本端的fin,如下代码所示: void tcp_close(...else if (tcp_close_state(sk)){ // tcp_close_state会将sk从close_wait状态变为last_ack // 发送fin包 tcp_send_fin...出现大量close_wait的情况 linux中出现大量close_wait的情况一般是应用在检测到对端fin时没有及时close当前连接。有一种可能如下图所示: ?

5.2K80
领券