找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3539|回复: 3

Proactor模式下接受数据包大小限制

[复制链接]
发表于 2009-10-22 18:49:30 | 显示全部楼层 |阅读模式
我用ACE的Proactor模式开发网络服务器程序,建立连接后我发现当peer发过来的数据超过1456字节时服务器一次read函数调用只能收到1456字节数据,我想通过setsockopt 函数设置,使得一次接受数据能加大:
// TProactorService是ACE_Service_Handler的派生类
void TProactorService::open(ACE_HANDLE h, ACE_Message_Block& /*mb*/)
{

      int nRecvBuf=32*1024;         //设置为32K
     ACE_OS::setsockopt(h,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));
。。。
}

但不起作用,不知何故?需要在哪里调用setsocketopt呢?
发表于 2009-10-23 09:20:39 | 显示全部楼层

回复 #1 aclaire 的帖子

发送和接受一次的数据的大小和你设置的message_block的大小有关吧。而通过setSocketOpt设置的是你发送的缓冲区的大小。
我的理解是这样的,我是菜鸟哈。仅做参考
还是请modern大哥来看看吧。
发表于 2009-10-23 11:59:56 | 显示全部楼层
UDP倒是有包的大小限制,
TCP没有这个限制,
另外设置缓冲区大小不管这个的。
贴一下楼主的读函数吧,
估计还是用法问题。
 楼主| 发表于 2009-10-28 14:56:41 | 显示全部楼层
谢谢各位!读函数就是简单的调用Proactor的读了,没有玩花的,另外,ACE_Message_Block也够大,我现在采取的办法是多读几次直到全部读到为止,这样问题也就解决了,呵呵
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-22 17:59 , Processed in 0.019941 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表