|
我用前摄器模式写一个支持下载服务器的demo,调式的时候发现服务器返回not enough space的代码,但是数据仍然传给了客户端,
以下是我的代码:
//从segment中获取数据,可能通过startPoint和data_count截取部分数据
writeMB =SMovieInfo::instance()->getSegmentContent(data_bulkID,data_segmentID,data_startPoint,data_count);
ACE_Message_Block *head;
ACE_OutputCDR outCDR(ACE_CDR::MAX_ALIGNMENT+8);
outCDR<<ACE_OutputCDR::from_boolean(ACE_CDR_BYTE_ORDER);
if (writeMB == NULL)
{
data_count = 0;
}
outCDR<<ACE_CDR::ULong(data_count);
//用两个ACE_Message_Block串联
if (writeMB!=NULL)
{
head = new ACE_Message_Block((outCDR.begin())->rd_ptr(),(outCDR.begin())->total_length());
head->wr_ptr((outCDR.begin())->total_length());
head->cont(writeMB);
}
unsigned long resultsize = head->total_length();
if (this->writer_.writev(*head,resultsize)!=0)
{
ACE_ERROR((LM_ERROR,ACE_TEXT("%p\n"),ACE_TEXT("starting write")));
}
客户端请求的数据包大小是823136+8,服务器的两个ace_message_block包大小一个是8,一个是823136,发送出去产生 starting write:no enough space的错误
请问我该如何处理,是否需要将异步write每次写的数据减小,而不是这样一次发送800KB的数据呢。
初学者,请大家赐教,谢谢 |
|