gpt4 book ai didi

c++ - Boost::asio socket - 如何在 'throw' 中创建 read_some "timeout"?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:05:11 29 4
gpt4 key购买 nike

所以通常我们会做这样的事情 socket.read_some(boost::asio::buffer(buffer, buffer_size)); 但是如何让它在读取还没有开始的情况下抛出异常比说 333 秒更长的时间?

最佳答案

您应该考虑使用 async_read_some 而不是 read_some,因为它允许您在读取的同时启动一个新的后台计时器。然后,为您执行的每个新套接字创建一个新计时器:

boost::asio::io_service io_service;

time_t_timer timer(io_service);

timer.expires_from_now(333);
std::cout << "Starting asynchronous wait\n";
timer.async_wait(&handle_timeout);
io_service.run();

您将有两个异步调用在后台等待。

每当您在计时器上收到一些数据时,您可以使用 cancel 重置倒计时和 expires_from_now,当计时器到期时,您可以关闭套接字或采取其他操作。

关于c++ - Boost::asio socket - 如何在 'throw' 中创建 read_some "timeout"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8002737/

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