gpt4 book ai didi

c++ - boost::asio::ip::tcp::socket 中的 async_read_some() 是如何工作的?

转载 作者:太空狗 更新时间:2023-10-29 19:49:36 24 4
gpt4 key购买 nike

它写在 documentation 中:

This function is used to asynchronously read data from the stream socket. The function call always returns immediately.

我知道它是异步的,所以它立即返回。但是 async_read_some() 与自由函数 read() 有何不同?当我尝试 std::cout 用于 async_read_some() 的缓冲区时,该函数似乎读取了很多次,直到流中没有数据。

这是否意味着 async_read_some() 不断请求直到它收到每个数据,例如,在 HTTP GET 请求中?服务器会一次写入一点点并发送一点点给客户端(async_read_some() 读取一点点整个数据),或者一次将所有数据转储给客户端?

最佳答案

不,async_read_some() 不连续请求。

ip::tcp::socket::async_read_some() 函数将进行系统调用以开始读取。

之后,下次您在传递给 ip::tcp 的构造函数的 io_service 上调用 io_service::run() 时: :socketio_service 将检查 async_read_some() 是否读取了任何数据。

如果数据已被读取,那么它将调用您传递给 async_read_some()ReadHandler 回调。

如果尚未读取数据,它将返回并在您下次调用 io_service::run() 时再次检查是否完成。

关于c++ - boost::asio::ip::tcp::socket 中的 async_read_some() 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7785761/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com