【问题标题】:async_connect blocks io_service::run_one() in boost::asioasync_connect 在 boost::asio 中阻塞 io_service::run_one()
【发布时间】:2010-11-04 21:43:59
【问题描述】:

我正在尝试运行以下代码:

some_sock.async_connect(...); // handle_connect() sets the 'condition' flag

boost::asio::deadline_timer t(ios, boost::posix_time::seconds(2));
while (t.expires_from_now() >= boost::posix_time::seconds(0))
{
  ios.run_one();
  if (condition) return;
}

在计时器 t 到期后(2 秒后),从 run_one() 返回理想的行为。 实际上,run_one() 会阻塞,直到收到 SYN-ACK 或 RST。如果服务器没有响应,run_one() 将阻塞超过 2 秒的超时时间。

我应该怎么做才能等待指定的时间连接在后台做一些工作?

谢谢。

【问题讨论】:

  • 谢谢。 t.async_wait(boost::bind(empty_function()));解决了这个问题。

标签: c++ boost tcp boost-asio


【解决方案1】:

使用io_service::rundeadline_timer::async_wait,如async tcp client example 中所述。

【讨论】:

    【解决方案2】:

    在另一个线程中为 connect() 调用 run_one()。超时调用 some_sock.cancel()。 (先阅读它的文档)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 2016-01-07
      相关资源
      最近更新 更多