这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 请教vxworks的socket通信编程,十分着急! 问题已解决!

共7条 1/1 1 跳转至

请教vxworks的socket通信编程,十分着急! 问题已解决!

菜鸟
2007-01-16 19:09:18     打赏
Vxworks下的client程序,创建了60个socket分别与60个server(运行在windows下的一个仿真程序)通信,通信速度为700ms查询一圈(每次查询10个),运行一段时间后,有的连接出现不可写的情况(用select实现,时间为1000us),继续运行一段时间,send调用返回errno= ENOBUFS (缓冲内存不足),程序调用shutdown、close释放资源,然后调用socket、setsockopt(设置缓冲区大小)、connect,会出现setsockopt返回-1或connect返回errno= ENOBUFS的现象,不知原因如何?

1、 是否和server仿真程序有关?

2、 缓冲内存为何刚开始够用而后来不足?

3、 每个socket的收发缓冲区大小设置的原则是什么?

十分着急,请各位高手指点,非常谢谢!

[align=right][color=#000066][此贴子已经被作者于2007-1-20 11:18:57编辑过][/color][/align]



关键词: 请教     vxworks     socket     通信     编程         

菜鸟
2007-01-18 23:07:00     打赏
2楼
恐怕不仅仅是socket的问题了

菜鸟
2007-01-18 23:37:00     打赏
3楼

vxWorks下缺省为每个socket创建256K的缓冲,60个socket用下来需要15M的内存。

发送出现ENOBUFS应该跟socket关系不是很大,发送申请拷贝内存的时候申请不到也会出现这个错误。检查一下内存空间吧,开始的时候网口bd表,收发缓冲都是空的,使用一段时间后,所有的bd上都要挂满2K内存,收发缓冲里面也会有未释放的内存。查一下出错的时候剩了多少内存就知道了。


菜鸟
2007-01-20 19:04:00     打赏
4楼
这个问题已解决,是server软件接收异常引起的,但client errno= ENOBUFS 的深层次原因还不清楚,非常感谢各位!

菜鸟
2007-01-20 19:07:00     打赏
5楼
又出现了新的问题,正常通信时,拔掉网线,client send返回errno= ENOBUFS (缓冲内存不足),shutdown、close后调用socket、setsockopt(设置缓冲区大小)、connect,会出现setsockopt返回-1或connect返回errno= ENOBUFS的现象,大约9分钟之后重建连接成功,不知原因如何?请各位继续指点。

菜鸟
2007-01-23 17:17:00     打赏
6楼

当释放socket的时侯,因为还有未全部传送的数据,所以socket的buf并不是当时释放,而是过一会之后好像通过tcp的超时才释放的,所以会出上述现象,但tcp为什么这样处理,怎么改,我也搞不清楚,希望高手指导。

这个问题折腾我两个星期:(


菜鸟
2007-01-23 19:11:00     打赏
7楼
非常着急啊,请高手百忙之中指导一下!

共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]