5758|3

80

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

如何解决VxWorks情况下的tcp连接异常快速处理方法,包括客户端死机,reset重起,网线拔掉,对端掉电 [复制链接]

 tcp连接模型如下(C语言)
场景:A与B是vxWorks下的两主机,需要建立一条TCP连接.(A,B任一方为client或server);
产生这个原因是因为tcp是一个单向的处理通道,也就是A到B数据量很大,B到A的数据量很小;没有设计心跳和握手.产品已成型,更改设计涉及面广,顺便说一句这个设计很不到位,需要一个开销最小的修改.


过程如下:
1.A连接B成功
2.B重启或拔板(vxWorks)
3.在B重启之后A无任何数据包到B;
4.B重启成功后,其服务端口正常打开;但与A无任可相关性,A可通过新端口与之建立连接.因旧连接一直保活没有处理.
5.在A的主机上通过inetstatShow还能看到以前的tcp连接为建立状态.
也就是目前A到B存在一个假的空闲连接要干掉.也就是一个单向的数据通道,任何心跳机制能处理这种异常;如果和第三方对接没有心跳,只能等协议栈超时(keep alive =2小时)删除.

仔细想想细节,有什么好的办法没有?
目前有如下解决办法,有其它的办法没有?
1.做心跳处理
2.A通过tcp连接发送检测数据包,触发发送异常处理.

最新回复

本场景解决如下 因为是个不对称的连接,B向A在给定时间内向A发送一个探测数据包触发select事件,处理该事件解决; 前提A,B有内部协议校验.  详情 回复 发表于 2009-5-8 17:50
点赞 关注
 

回复
举报

81

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
对这种假连接,这种情况最好的办法就是做心跳处理了。心跳处理做成单独的一个任务,新加一个这么的功能,也不需要修改原来的代码,不影响原来的东西。
修改keep alive参数使得超时时间缩短也是个办法
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
TCP连接异常情况只能通过心跳或超时处理,这一点办法都没有,因为他本身没有心跳机制.
比如B把网线拔了,A是无法知道这条TCP连接已经断了.
这很容易证明:当A与B之间建立好连接后,若它们之间不发送任何数据,它们之间抓不到任何的包,
所以当B异常断开后,A是无法发现的.

但如果A与B是直边的,那A可以检测自己与B相连的端口是up还是down来判断.但要是中间经过交换机,这方法就不行了

最好的方法还是心跳.
当然超时也是可以的,但并不一定是你所说的协议栈2小时超时,在你的应用程序可以设置当从该端口十分钟未收到任何数据,就认为该连接断了,把连接给删掉
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

4
 
本场景解决如下
因为是个不对称的连接,B向A在给定时间内向A发送一个探测数据包触发select事件,处理该事件解决;
前提A,B有内部协议校验.
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表