我按照以下链接实现了超时阻塞读取。
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无限期阻止之前,我应该调用哪个函数?
此致
答案 0 :(得分:2)
前缀async
表示该函数以异步方式运行。
只需拨打socket::receive
即可。
如果您需要在调用返回之前读取固定数量的字节,您最好查看asio::read
,因为receive
操作可能无法接收所有请求的字节数
答案 1 :(得分:1)
您只需致电io_service::run()
等待工作完成。
请记住reset()
服务,然后再将其用于更多工作。