使用async_write_some和async_write时

时间:2017-11-18 13:41:37

标签: c++ boost boost-asio

我正在阅读Boost Asio的文档,并说它

  

boost::asio::async_write_some可能无法将所有数据传输到对等方。如果需要确保在异步操作完成之前写入所有数据,请考虑使用async_write函数。

所以这是我的问题,在哪种情况下我们应该使用它们,确保所有数据都写得非常重要?!什么时候使用async_write_some只是这个函数在我看来没用?

2 个答案:

答案 0 :(得分:1)

当您需要发送完全适合缓冲区的特定响应时,

async_write在请求 - 回复模式下非常有用。即在发送邮件后切换到阅读模式时。

但是如果您需要发送的数据多于写入缓冲区中的数据,那么是否发送整个缓冲区并不重要,因为您仍然需要发送更多数据。在这种情况下,确保发送整个缓冲区将是低效的,因为最后一个块可能比你在循环中调用async_write_some时的情况要小,如果你去了更多的数据填充缓冲区。为了获得最佳性能,您需要确保发送缓冲区中始终有足够的数据来填充整个帧。

答案 1 :(得分:0)

当您从一个地方异步读取并写入另一个地方时,您可能只想将一些字节推送到目的地,并想知道缓冲区中何时有空间发送更多内容。您只需要使用async_write进行上一次写入(当您知道无法发送时)