Chinaunix首页 | 论坛 | 博客
  • 博客访问: 906619
  • 博文数量: 201
  • 博客积分: 8078
  • 博客等级: 中将
  • 技术积分: 2162
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-20 17:22
文章分类

全部博文(201)

文章存档

2013年(3)

2012年(11)

2011年(34)

2010年(25)

2009年(51)

2008年(77)

分类: WINDOWS

2010-12-13 23:02:39

今天测试的时候发现: 某些windows 2000 下的客户端无法正常工作,经过一番的查找定位,最终确定是recv调用的问题。那就是有一个潜规则:
recv(s, buf, len, flags) 调用中的,对于TCP来说(我们的客户端的调用recv是阻塞调用的, 非阻塞下是否存在这个问题不确定) len 不能太大(不管buf是否有效),就目前知道的时候会len <= 4096时能正常工作,更大的值没有经过认真测试。反正len = 512 × 1024是无法正常工作的。len值太大的话,会返回 WSAENOBUF。

定位这个问题后,在 Google上查找了一番,最终在一个英文网站邮件列表中看到相同的情况:
一个在 XP SP2 的环境中不能使用 len > 71M 的recv调用,然后最终改用 len = 1M来回避这个问题。
链接可以自己看: 

[windev] Strange socket error: WSAENOBUF on call to recv
http://lists.windev.org/pipermail/windev/2008-July/001082.html

阅读(686) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~