2

我正在使用Boost::Asio. 我必须跟踪每个客户端的数据包时间。当一个 IO 操作完成后,我可以使用GetQueuedCompletionStatus. 我找不到用Boost::Asio.

我该如何实现这一点或有其他选择吗?

4

1 回答 1

3

我不确定我是否正确理解了您的问题:将所有与客户端相关的状态(套接字、地址等)存储在诸如asio async tcp 服务器示例中的会话类之类的类中有什么问题?然后,例如,您可以在调用async::write操作时启动计时器

boost::asio::async_write(socket_,
      boost::asio::buffer(data_, bytes_transferred),
      boost::bind(&session::handle_write, this,
        boost::asio::placeholders::error));

并在写入完成处理程序中停止计时器,一旦写入完成handle_write,asio 将调用该计时器。

void handle_write(const boost::system::error_code& error)

或者,您可以轻松地使用boost::bind来保持状态。例如,如果您调用异步写入操作,您将指定通常具有类似于handle_write带有一些附加参数的签名的处理程序,并将附加参数绑定到调用。

如果这不能回答您的问题,请为您的问题添加一些进一步的解释,以便有人可以更好地帮助您。

于 2011-12-01T19:43:59.353 回答