在Receiver::handle_read_dgram函数的最后,增加下面的代码:
ACE_Message_Block* msg = new ACE_Message_Block (1024);
// create a message block to read the message body
ACE_Message_Block* body =new ACE_Message_Block (1024);
msg->cont (body);
// ok lets do the asynch
read
size_t number_of_bytes_recvd = 1024;
int
res = rd_.recv (msg,
number_of_bytes_recvd,
0,
PF_INET,
this->act_);
也就是增加rd_.recv的调用,继续数据的接受,同时也不用担心这里的new没有显式的delete,因为
result.message_block
()->release ()已经将那块内存区域释放了;事实上测试数据表明,也没有明显的
内存泄露
本文介绍了一个ACE消息处理函数的改进方案,在Receiver::handle_read_dgram中增加了rd_.recv调用来继续接收数据,并通过创建ACE_Message_Block来存储消息主体。文中还提到了内存管理方式,确保了不会发生内存泄漏。

1019

被折叠的 条评论
为什么被折叠?



