Boost阻塞读超时

Boost blocking read timeout

本文关键字:超时 Boost      更新时间:2023-10-16

我将按照下面的链接实现一个带超时的阻塞读取。

http://www.boost.org/doc/libs/1_50_0/doc/html/boost_asio/example/timeouts/blocking_tcp_client.cpp

很好。现在我想实现另一个不使用timeout的函数。所以我试着直接打电话:

socket_.async_receive(boost::asio::buffer(buf,size),
         boost::bind(&TCPClient::HandleReceive, _1, _2, &ec, &length));

问题是函数没有阻塞,并立即返回长度为0的值。

我应该在async_receive之前调用哪个函数来无限期地阻塞?

前缀async表示该函数异步运行。

直接调用socket::receive

如果您需要在调用返回之前读取固定数量的字节,您最好查看asio::read,因为receive操作可能不会接收到所有请求的字节数。

你可以直接调用io_service::run()等待工作完成。

在使用该服务进行更多工作之前,请记住将其reset()