后来就想了另外一个办法,当想析构它时,绝不调用delete this,
而是调用另外一个函数:
void DeleteSelf()
{
ACE_OS::closesocket(this->handle());
handle(ACE_INVALID_HANDLE);
}
virtual void handle_read_stream(const ACE_Asynch_Read_Stream::Result &result)
{
if (!result.success()
|| result.bytes_transferred() == 0)
{
delete this;
}
else
{
......
}
}
~WL_Service_Handler(void)
{
....................
m_reader.cancel();
m_writer.cancel();
m_bCanWrite = 0;
...............
}
这时候,非常诡异的问题就出现了,这个事件处理器居然会从其他事件处理器抢读,
比如本地a,b,c 分别连接到服务器A,B,C,现在我按照上述的办法关闭a(调用DeleteSelf,而不是delete this)
从服务器B,C发回来的数据,居然奇异的被a抢读了,b,c只能读到一部分发回来的数据.
我想要的现实是:短连接,怎么实现呢? |