您的位置:首页 > 其它

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

2012-06-11 14:25 393 查看
程序背景:

客户端与服务端通过短连接通信,客户端发送消息频率为 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状态。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐