飞鸟企业云解决中小企业文件分发,收集,存储需求:http://www.flyeryun.com/
在用boost的asio开发网络应用时可能会用到2个异步发送函数
(1)basic_stream_socket类的async_write_some函数
这个函数以异步的方式将缓冲区中的数据写入到stream socket中,但是写入
操作不能保证将所有的字节全部写入。
(2)async_write函数
async_write是位于asio命名空间下的一个函数,可以保证将缓冲区中的数据全部
写入到stream socket中。
那么async_write是怎么实现全部写入控制的呢?
以下是async_write一个实现中的源码调用
detail::make_write_op(
s, buffers, transfer_all(), BOOST_ASIO_MOVE_CAST(WriteHandler)(handler))(
boost::system::error_code(), 0, 1);
函数make_write_op会返回一个write_op类的实例,而write_op是一个函数对象,通过这个
函数对象将操作转到operator()中。下面是一个operator实现
void operator()(const boost::system::error_code& ec,
std::size_t bytes_transferred, int start = 0)