|
这段代码片段,
AIO_Input_Handler .h
class AIO_Input_Handler : public ACE_Service_Handler
{
public:
AIO_Input_Handler(AIO_CLD_Acceptor *acc=0):acceptor_ (acc),mblk_ (0){}
virtual ~AIO_Input_Handler();
virtual void open(ACE_HANDLE new_handle,ACE_Message_Block &message_block);
virtual void addresses(const ACE_INET_Addr &remote_address, const ACE_INET_Addr &local_address);
int initWriteStream(ACE_Asynch_Write_Stream *ws);
AIO_CLD_Acceptor *acceptor_;
ACE_Message_Block *mblk_;
ACE_Asynch_Write_Stream write_;
ACE_Asynch_Read_Stream reader_;
virtual void handle_read_stream(const ACE_Asynch_Read_Stream::Result &result);
virtual void handle_write_stream(const ACE_Asynch_Write_Stream::Result &result);
ACE_INET_Addr remote_address_save;
ACE_INET_Addr local_address_save;
ACE_TCHAR peer_name[MAXHOSTNAMELEN];
};
AIO_Input_Handler .cpp
void AIO_Input_Handler::handle_read_stream (const ACE_Asynch_Read_Stream::Result &result)
{
while(true)
{
ACE_NEW_NORETURN(mblk_,ACE_Message_Block(TEST_PACKET_LEN));//TEST_PACKET_LEN长度为512
mblk_->copy((char*)TestPacket,TEST_PACKET_LEN);
if(this->write_.write(*mblk_,mblk_->length())!=0)
{
printf("错误");
mblk_->release();
break;
}
else{
mblk_->release();
printf("发送成功");
}
}
}
本来是想每次客户端接进来,利用循环发送1000条消息给客户端,后来发现在while循环中,不断的异步write,会出现内存不断增加,一开始以为是ACE_Message_Block的关系,后来发现不是,因为光COPY()和release()内存不会增加,而往往异步write后,内存直线上升,难道这是SOCKET的缓冲区溢出么?难道ACE的异步写没有解决缓冲区溢出的问题么?不太明白,有什么办法可以解决啊?比如在write前如何得知缓冲区是否已满啊?请各位教教我。 |
|