Boost::Asio 的 IOCP CompletionKey?
Posted
技术标签:
【中文标题】Boost::Asio 的 IOCP CompletionKey?【英文标题】:IOCP CompletionKey for Boost::Asio? 【发布时间】:2011-11-30 00:11:08 【问题描述】:我正在使用Boost::Asio
创建一个 TCP 服务器。我必须跟踪每个客户端的数据包时间。当一个 IO 操作完成时,我可以使用GetQueuedCompletionStatus
返回的完成键轻松识别每个客户端。我找不到使用Boost::Asio
的方法。
我怎样才能实现这个或有任何替代方案?
【问题讨论】:
【参考方案1】:我不确定我是否正确理解了您的问题:
将所有与客户端相关的状态(套接字、地址等)存储在诸如asio async tcp server example 中的会话类之类的类中有什么问题?然后,例如,您可以在调用 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
的签名的处理程序并带有一些附加参数,并将附加参数绑定到调用。
如果这不能回答您的问题,请为您的问题添加一些进一步的解释,以便有人可以更好地帮助您。
【讨论】:
以上是关于Boost::Asio 的 IOCP CompletionKey?的主要内容,如果未能解决你的问题,请参考以下文章