c++ - 在 Windows 中将数据与 SOCKET 相关联以用于 recv/WSARecv Hook 的最佳方法

标签 c++ sockets networking hook

我正在编写 Hook WSARecv/recv 和其他网络功能的 dll,我需要将一些数据与用户连接 (SOCKET) 相关联,并在 WSARecv/recv/WSASend/send Hook 中使用它。 我想知道,最好和最快(就性能而言)的方法是什么?

我现在这样做的方式非常简单:我有一个 SOCKETS 数组(如 fd_set ),第二个数组具有相同的索引(又名 fd),我在其中存储结构和我的信息。

这种方法的问题很明显——每次我必须挂接传入或传出数据包时,我必须遍历我的 fd_array 并通过 SOCKET 找到 fd(索引),然后使用它来访问第二个数组中的数据。当我的服务器有超过 1000 个连接时,这会造成麻烦(每次服务器发送或接收数据包时,我必须遍历一个包含 1000 个元素的数组来查找 fd)。

有没有更好更快的方法来做到这一点?

最佳答案

要改变套接字调用, Hook API 调用不是推荐的方法。您可以使用 winsockLSP 或 WFP 方法来过滤网络操作。这两种机制都提供了在每个网络连接上存储附加信息的框架。

关于c++ - 在 Windows 中将数据与 SOCKET 相关联以用于 recv/WSARecv Hook 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25272300/

相关文章:

c++ - 从 istream 读取一个 boost::variant 类型

c++ - throw 和捕捉整数是如何工作的?

windows - 模拟网络到特定进程

sockets - Kubernetes是否支持蓝绿色部署?

c++ - 是否可以将成员函数添加到 C++ 中的数据类型?

c++ - *static* 关键字在成员方法声明中的位置

c - 什么是 servaddr.sin_addr.s_addr=INADDR_ANY

python - 有没有办法重新打开套接字?

c - 检测客户端应用程序何时按顺序关闭连接

linux - 硬中断和软中断