提升阻塞读取超时

时间:2014-05-15 20:03:35

标签: c++ boost boost-asio

我按照以下链接实现了超时阻塞读取。

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

工作正常。现在我想实现另一个不使用超时的函数。所以我试着直接打电话:

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

问题是函数不会阻塞并立即返回长度为0.

在async_receive无限期阻止之前,我应该调用哪个函数?

此致

2 个答案:

答案 0 :(得分:2)

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

只需拨打socket::receive即可。

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

答案 1 :(得分:1)

您只需致电io_service::run()等待工作完成。

请记住reset()服务,然后再将其用于更多工作。