我有一个集群程序boost asio
用来制作网络部分。
我正在使用async_write
函数将消息从服务器写入客户端:
boost::asio::async_write( *m_Socket,
boost::asio::buffer( iData, iSize ),
boost::bind(
&MyObject::handle_write, this,
boost::asio::placeholders::error ) );
我的handle_write
方法:
void
MyObject::handle_write( const boost::system::error_code& error )
{
std::cout << "handle_write" << std::endl;
if (error)
{
std::cout << "Write error !" << std::endl;
m_Server->RemoveSession(this);
}
}
它似乎运作良好。当我使用内存泄漏检测程序时,根本没有泄漏。
但是,我的程序应该运行很多天而不会中断,并且在测试期间,我似乎没有足够的内存......经过一番检查,我发现我的程序正在0.3Mo
以秒为单位分配。使用内存验证器,我发现它进入了boost::asio::async_write
......
我检查了文档,我认为我以正确的方式使用它......我错过了什么吗?
编辑1:
这就是我如何调用调用async_write
自身的函数:
NetworkMessage* msg = new NetworkMessage;
sprintf(msg->Body(), "%s", iData );
m_BytesCount += msg->Length();
uint32 nbSessions = m_Sessions.size();
// Send to all clients
for( uint32 i=0; i < nbSessions; i++)
{
m_Sessions[i]->Write( msg->Data(), msg->Length() );
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
}
delete msg;
msg->Data
是传递给的数据async_write
。