你要是看过basic_stream_socket的文档,里面提到async_write_some不能保证将所有要发送的数据都发出去。并且提到如果想这样做,需要使用boost asio的async_write
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 expected_size, size_t offset) {
if (ec) {

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

被折叠的 条评论
为什么被折叠?



