recv() 返回 WSAENOBUFS ,有人碰到过么?

everandforever 2003-01-23 01:41:03
使用基于连接的 CAsyncSocket. 我在 局域网 上发送一系列的 40-50字节 的数据包, 大约 1 秒发送30个包.发送方式是先将数据存在缓冲区中,然后调用 AsyncSelect(FD_WRITE), 在 OnSend() 中发送. 接收端在 OnReceive() 中调用 Receive() ( Receive()内部是调用 recv() )接收, 但是过一段时间 Receive() 就会返回错误 WSAENOBUFS .很是奇怪,我在网上搜到一个帖子( http://www.kx.com/listbox/k/msg05869.html ),但是没有提出解决方案. 我想问一下, 这里有人碰到过么.
...全文
60 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
everandforever 2003-02-01
  • 打赏
  • 举报
回复
TO Richuen22(更深蓝): 是随存随发,只要网络不忙就发。
Richuen22 2003-01-27
  • 打赏
  • 举报
回复
“发送方式是先将数据存在缓冲区中”是存了30个包后发还是等缓冲区满后再发?偶现在还未深入网络,不要见怪!
bigbook2000 2003-01-26
  • 打赏
  • 举报
回复
错误代码10055

你的申请的buff的长度小于你读取数据的长度
shitalone 2003-01-26
  • 打赏
  • 举报
回复
同意。
recv函数中有参数是用来指明recv的字节的个数的。难道你设的该参数的大于你的buffer的长度。
mengxihe 2003-01-26
  • 打赏
  • 举报
回复
gz
everandforever 2003-01-26
  • 打赏
  • 举报
回复
TO shitalone(西特龙) :
应该不是我自己的BUFFER太小,RECV又不会去算BUFFER有多大(也不可能算得到)。
我调用 SETSOCKOPT 把系统的接收缓冲区从 8192 调整到了 65536 跑了2天,感觉好了一些。但我还想继续跑几天看看。
everandforever 2003-01-23
  • 打赏
  • 举报
回复
我试试.
aben456 2003-01-23
  • 打赏
  • 举报
回复
recv了多少字节出现了这种情况,有可能是满了
zfr 2003-01-23
  • 打赏
  • 举报
回复
你的buffer满了,把buffer开大些,及时把数据读出来

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧