aclaire 发表于 2009-10-22 18:49:30

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

我用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呢?

psycheqiqi 发表于 2009-10-23 09:20:39

回复 #1 aclaire 的帖子

发送和接受一次的数据的大小和你设置的message_block的大小有关吧。而通过setSocketOpt设置的是你发送的缓冲区的大小。
我的理解是这样的,我是菜鸟哈。仅做参考
还是请modern大哥来看看吧。

modern 发表于 2009-10-23 11:59:56

UDP倒是有包的大小限制,
TCP没有这个限制,
另外设置缓冲区大小不管这个的。
贴一下楼主的读函数吧,
估计还是用法问题。

aclaire 发表于 2009-10-28 14:56:41

谢谢各位!读函数就是简单的调用Proactor的读了,没有玩花的,另外,ACE_Message_Block也够大,我现在采取的办法是多读几次直到全部读到为止,这样问题也就解决了,呵呵
页: [1]
查看完整版本: Proactor模式下接受数据包大小限制