maddreamw88 发表于 2011-8-4 14:03:19

为什么 windows平台 recv 接收返回-1 错误号10035

本帖最后由 maddreamw88 于 2011-8-5 10:10 编辑

请问我的ace应用程序 在windows 平台 tcp 发送大数据包如1024 * 5 字节时 接收端调用 peer().recv(myRecv_->wr_ptr(), wantLen_);返回-1
错误号是10035 。
而同样代码 在linux平台 是ok的?
我linux和 windows 都是基于 ACE_Select_Reactor 实现的

我为了修改该错误,曾尝试如下修改,但没效果,不知道设置点不对呢还是别的原因,请问各位大侠有没碰到同样问题?
                              int nSocketBuffSize = 1024 * 64;
                        // 修改接收缓冲区
                        peer().set_option(SOL_SOCKET, SO_RCVBUF, &nSocketBuffSize, sizeof(int));
                        // 修改发送缓冲区
                        peer().set_option(SOL_SOCKET, SO_SNDBUF, &nSocketBuffSize, sizeof(int));

maddreamw88 发表于 2011-8-4 17:04:11

本帖最后由 maddreamw88 于 2011-8-5 13:54 编辑

回复 1# maddreamw88

   我测试程序都是同样代码,包的发送频率都是100毫秒发送一次,
1: linux平台之间的互发,
      包大小1024 * 10发送,接收都正常
2: windows平台之间的互发
       发送包大小1024 * 4 没问题 ,但1024 * 5 就有问题,所谓的有问题就是接收端recv就返回-1了, 错误号10035(WSAEWOULDBLOCK)
3:windows 和 linux 平台之间的互发
      linux作发送端,windows作接收端,发送包大小1024 字节 刚开始还能接收,但过了阵子 就接收返回-1了 错误号10035,
                                       若发送包大小是1024 * 2 字节,windows接收端马上 返回-1了,错误号10035

我现在把这个错误号忽略,程序接收发送貌似没影响,请问 忽略它 有什么影响没?怎么样才能避免掉这个错误号的产生?

ztenv 发表于 2012-1-30 14:37:12

发送那么大的包并不好,这个错误是貌似收于底层的在原因引起的。
页: [1]
查看完整版本: 为什么 windows平台 recv 接收返回-1 错误号10035