我正在使用 Boost::Asio
创建 TCP 服务器。我必须跟踪每个客户端的数据包时间。当 IO 操作完成时,我可以使用 GetQueuedCompletionStatus
返回的完成键轻松识别每个客户端。我找不到使用 Boost::Asio
执行此操作的方法。
我该如何实现这个或者有其他选择吗?
最佳答案
我不确定我是否正确理解你的问题:
将所有客户端相关状态(套接字、地址等)存储在类(例如 asio async tcp server example 中的 session 类)中有什么问题? ?然后,例如,您可以在调用 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
的签名和一些附加参数,并将附加参数绑定(bind)到调用。
如果这不能回答您的问题,请为您的问题添加一些进一步的解释,以便有人可以更好地帮助您。
关于boost - Boost::Asio 的 IOCP CompletionKey?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8319525/