|
发表于 2009-10-22 16:00:49
|
显示全部楼层
this->writer应该是个ACE_Asynch_Write_Stream吧。它的write()是异步的,返回成功表示已经发送请求,该请求在排队中。并不表示已经写到socket buffer里了。过一段时间,系统在完成写入socket buffer后,会产生完成通知,触发执行handle_write_stream()。write出错不会是缓冲区满的原因,socket缓冲区在io繁忙的时候常常是满的,这时候io请求会排队而不是返回出错。
ACE_Asynch_Write_Stream的write()在windws上的实现代码在WIN32_Asynch_IO.cpp:
int
ACE_WIN32_Asynch_Write_Stream::write (ACE_Message_Block &message_block,
size_t bytes_to_write,
const void *act,
int priority,
int signal_number);
其调用的shared_write()用了WSASend()的OVERLAPPED模式。
楼主说传大文件会出问题,write()返回出错。这个write()中的返回点不多,参考一下errno的值应该容易找到原因。 |
|