今天测试的时候发现: 某些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
阅读(726) | 评论(0) | 转发(0) |