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呢?
回复 #1 aclaire 的帖子
发送和接受一次的数据的大小和你设置的message_block的大小有关吧。而通过setSocketOpt设置的是你发送的缓冲区的大小。我的理解是这样的,我是菜鸟哈。仅做参考
还是请modern大哥来看看吧。 UDP倒是有包的大小限制,
TCP没有这个限制,
另外设置缓冲区大小不管这个的。
贴一下楼主的读函数吧,
估计还是用法问题。 谢谢各位!读函数就是简单的调用Proactor的读了,没有玩花的,另外,ACE_Message_Block也够大,我现在采取的办法是多读几次直到全部读到为止,这样问题也就解决了,呵呵
页:
[1]