簡體   English   中英

在boost async_receive_from上定義超時

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM