boost - Boost::Asio 的 IOCP CompletionKey?

标签 boost boost-asio iocp

我正在使用 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/

相关文章:

c++ - 推广还是不推广——这是一个问题

boost::spirit::karma 生成器规则中的语义 Action

c++ - boost::date_time::days_until_weekday 的编译错误

c++ - Boost Hana any_of?

c++ - 指向不同返回类型和签名的函数的指针映射

c++ - WSARecv() 和 lpNumberOfBytesRecvd 参数

c++ - 在 Linux 上用 C++ 实现 HTTPS 文件服务器

c++ - 如何使用 boost::asio 保持套接字连接?

支持重叠 I/O(用于 IOCP)的计时器?

c - 如何兼顾 FILE_SKIP_COMPLETION_PORT_ON_SUCCESS、IOCP 和清理