原因分析: 因为tcp连接长时间没有发送数据,网关把从server-->;client的tcp连接关闭了.因为连接的建立过程是client ->; server ,因此server能监测到连接关闭,但client并不能监测出到server的连接已关闭.
"并没有到达20分钟,客户端就会主动发送connection reset by peer的信号",client并没有关闭,是网关把连接关闭了,
当前的状态是server已连接关闭,但client认为连接还存在,client要监测出来有两个条件一个是对该socket有读或些,能监测出来连接已关闭,还有跟据/实现比如1,2个小时没报文,监测出来连接已关闭
这个情况相当于把client的网线拔了,用netstat可以测一下的
解决办法:
建立心跳机制,让网关监测到一直有数据报文从网关通过.比如,client来了一个连接以后,server可以定时十秒或一分钟给client发送一个空包,
一般的心跳机制是在client发送保活包的.如果没有保活保或报文从网关经过,在15-20分钟会把连接掐断的
"并没有到达20分钟,客户端就会主动发送connection reset by peer的信号",client并没有关闭,是网关把连接关闭了,
当前的状态是server已连接关闭,但client认为连接还存在,client要监测出来有两个条件一个是对该socket有读或些,能监测出来连接已关闭,还有跟据/实现比如1,2个小时没报文,监测出来连接已关闭
这个情况相当于把client的网线拔了,用netstat可以测一下的
解决办法:
建立心跳机制,让网关监测到一直有数据报文从网关通过.比如,client来了一个连接以后,server可以定时十秒或一分钟给client发送一个空包,
一般的心跳机制是在client发送保活包的.如果没有保活保或报文从网关经过,在15-20分钟会把连接掐断的