gpt4 book ai didi

c++ - 在 boost async_receive_from 上定义超时

转载 作者:太空宇宙 更新时间:2023-11-04 12:53:30 25 4
gpt4 key购买 nike

我有一个 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 上定义超时?

最佳答案

Is there a way of defining a timeout on this recv ?

如果对 Component::recv 的调用本身就是一个 asio 操作,您可以定义一个截止时间计时器,在超时时取消读取操作。您可以在 Boost documentation 中找到示例(示例/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
}

关于c++ - 在 boost async_receive_from 上定义超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47789668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com