boost::asio async_write也不能保证一次发完所有数据 一

本文讨论了使用Boost.Asio库进行异步写操作时,`async_write_some`可能无法一次性发送所有数据的问题。针对此情况,作者提供了一个自定义的递归重试发送函数,通过bind传递待发送字节数和起始位置到异步回调。尽管遇到每次仅发送9个字节的困扰,作者对此是否为潜在bug保持疑问,并预告将在后续文章中继续探究。
摘要由CSDN通过智能技术生成

你要是看过basic_stream_socket的文档,里面提到async_write_some不能保证将所有要发送的数据都发出去。并且提到如果想这样做,需要使用boost asio的async_write

http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/reference/basic_stream_socket/async_write_some.html

Remarks

The write operation may not transmit all of the data to the peer. Consider using the async_write function if you need to ensure that all data is written before the asynchronous operation completes.

但是这几天我就遇到一个问题,以前一直都是一次发送成功的。

我想发送54个字节的数据,可是每次都是只发9个字节。因此只好自己写了一个重试发送的递归函数。也很简单,通过bind,每次传递想要发送的字节数木和发送开始位置给异步回调函数。

代码参考如下:

void Sign::AfterWriteMessage(error_code const& ec, size_t bytes_transferred, size_t 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值