首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > VxWorks >

急问,socket通信从WINDOWS移植到VXWORKS后,操作耗时的有关问题

2012-12-17 
急问,socket通信从WINDOWS移植到VXWORKS后,操作耗时的问题TCP双网冗余通信的程序,比如是A网和B网。socket为

急问,socket通信从WINDOWS移植到VXWORKS后,操作耗时的问题
TCP双网冗余通信的程序,比如是A网和B网。socket为非阻塞select模型。
远程连接的数据接收发送任务由一个线程负责完成,大约每50ms接收发送一次。在wing下拔开A网后,B网不会受到影响。移植后,A拔出后,明显感觉线程在send函数有阻塞,导致B网的收发受到影响。
我已经把下面选项设置了:
SO_KEEPALIVE 启动生命保持
SO_SNDBUF 和 SO_RCVBUF 是2*周期最大数据量
SO_SNDTIMEO 和 SO_RCVTIMEO 之前没设这个选项,一拔网线整个收发任务就阻塞了,现在设为0,也已经设为成功,但为什么还会有延时?
网上说可以把SO_SNDBUF设为0,不经过缓冲直接发送,但也不行。
请高手指点!
[最优解释]
wing是什么工具啊?A网和B网是怎么样连接的?
A拔出后,明显感觉线程在send函数有阻塞,,导致B网的收发受到影响。能否解释得更详细一些?

[其他解释]
不好意思,我没说清楚。就是在Windows下的程序,拔开网络线,非阻塞socket检测不可写,然后返回,这个过程很快。但移植后,会阻塞几十毫秒甚至更长的时间。
请问我是不是还有一些关键的选项没有设置?
[其他解释]
已解决。是因为调试时logmsg打印较多,拔网时如果正在输出,将导致所有可能打印的地方阻塞。打印内容少点周期长些都会避免这个问题。
困扰了我好几天,是个教训,也希望能对大家有所帮助。
感谢友情关注的朋友,结贴。
[其他解释]
我仅仅是使用setsockopt函数使能SO_KEEPALIVE,为什么不起作用啊?
我使用抓包工具,没有发现有keepalive的包被发出,只有一包RST。然后再断掉连接。

我在vxworks的内核组件里设置了keepalive的超时时间的。没有起作用。

预想是30秒就断开,结果是5分钟。

你知道是为什么吗?
我在windows里只要把so_keepalive选项激活,再设置keep_alive的超时时间,就可以了啊,也可以抓到keepalive包啊?

求助
谢谢

热点排行