服务器端出现大量SYN_RECV状态,导致客户端无法连接

程序背景:

客户端与服务端通过短连接通信,客户端发送消息频率为 600条/秒

BUG现象:

客户端向服务端发送一段时间的消息后,客户端无法与服务段建立连接,

 

查看服务端端口状态

netstat -an|grep 37058

发现存在大量SYN_RECV以及CLOSE_WAIT

 

查看客户端端口状态

netstat -an|grep 37058

发现存在大量的SYN_SENT以及FIN_WAIT_1

 

由于在服务端日志中曾经出现个 104 这个错误码,OS error code 104:  Connection reset by peer

而产生这个错误码后,会触发SIGPIPE信号。

 

因此猜想,出现SYN_RECV 和CLOSE_WAIT状态,是由于ACCEPT以及CLOSE函数调用时,被SIGPIPE中断,导致当时函数正在处理的端口出现异常状态。

 

BUG解决:

通过signal(SIGPIPE,SIG_ING) 忽略SIGPIPE信号,防止端口出现SYN_RECV以及CLOSE_WAIT状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值