检查时间数据?

时间:2015-11-21 14:26:03

标签: c++ tcp boost-asio

有没有办法在asio中检查特定时间的数据?

我有一个带有asio套接字的客户端,它有一个方法

Marionette.Router

我希望在这里有一些延迟,所以它检查数据最多1秒钟并返回更多ealy。此外,我不想轮询它,因为它显然需要一秒钟。我使用它的原因是,我确实将数据发送给客户端并等待响应。如果他在一定时间内没有回应,我就会关闭套接字。这就是提到的hasData的内容。

我知道使用select和fd_set是可能的。

asio Client是在服务器套接字类的Accept方法中创建的,后来用于处理请求并将数据发送回连接到此处的人。

bool ASIOClient::hasData()
{
    return m_socket->available();
}

1 个答案:

答案 0 :(得分:1)

您只需要尝试阅读

通常的方法是为所有可能需要" long"的异步操作定义截止日期。 (甚至无限期长)。

这在异步执行中非常自然:

只需添加截止日期计时器:

 boost::asio::deadline_timer tim(svc);
 tim.expires_from_now(boost::posix_time::seconds(2));
 tim.async_wait([](error_code ec) {
      if (!ec) // timer was not canceled, so it expired
      {
           socket_.cancel(); // cancel pending async operation
      }
 });

如果您想将其用于同步通话,则可以明智地使用poll()代替run()。请参阅此答案:boost::asio + std::future - Access violation after closing socket,它实现了一个帮助await_operation,它可以在一个超时的情况下同步运行单个操作