关于boost::asio::async_write的实现机制

本文探讨了boost::asio库中用于异步写入的两个关键函数:async_write_some和async_write。async_write_some可能不会一次性写入所有数据,而async_write则保证了完整的数据写入。async_write的实现依赖于函数对象write_op,通过递归调用async_write_some并检查完成状态,直到所有数据发送完毕,然后调用handler_通知应用程序。
摘要由CSDN通过智能技术生成
 飞鸟企业云解决中小企业文件分发,收集,存储需求: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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值