boost :: asio :: ip :: tcp :: socket中的async_read_some()实际上是如何工作的?

Amu*_*umu 3 c++ boost boost-asio

它写在文档中:

此函数用于从流套接字异步读取数据.函数调用总是立即返回.

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

这是否意味着async_read_some()请求持续,直到它收到每个数据,例如,在HTTP GET请求中?服务器一次写入很少并向客户端发送一点(用于async_read_some()读取一小部分整个数据),或者将所有数据一次性转储到客户端?

Jam*_*ock 7

不,async_read_some()不要求连续.

ip::tcp::socket::async_read_some()函数将进行系统调用以启动读取.

在此之后,下次呼叫时间io_service::run()io_service,你传递给的构造函数ip::tcp::socket时,io_service会检查,看看是否async_read_some()有读的任何数据.

如果已读取数据,则它将调用ReadHandler您传递给的回调async_read_some().

如果尚未读取数据,则会在下次呼叫时返回并再次检查完成io_service::run().