[英]Defining a timeout on boost async_receive_from
我有一個boost套接字,在上面定義了異步接收:
void recv() {
boost_socket->async_receive_from(
boost::asio::buffer(buffer, MTU),
endpoint,
[this](boost::system::error_code ec, std::size_t bytes) {
// Treatment...
if (event) {
Component::recv(handler);
}
}
});
}
但是如果沒有事件發生在這個套接字上(套接字上沒有數據包),我將陷入lambda方法中。
有沒有辦法定義此Recv的超時時間?
有沒有辦法定義此Recv的超時時間?
如果對Component::recv
的調用本身是asio
-operation,則可以定義一個截止時間計時器,該計時器在超時時取消讀取操作。 您可以在Boost文檔中找到一個示例(example / cpp03 / timeouts / blocking_tcp_client.cpp)。
否則,您可以使用std :: future:
using namespace std::chrono_literals;
auto fut = std::async(std::launch::async, &Component::recv, handler);
if(fut.wait_for(500ms) == std::future_status::timeout) {
// timed out
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.