【发布时间】:2013-08-06 02:37:35
【问题描述】:
当我可以读取套接字缓冲区而不实际读取它时,有一个 peek 选项(以了解可用于后续读取的字节数)。 fcntl 调用有这样的选择。
我想知道是否有一种方法可以在不将数据从套接字复制到应用程序缓冲区的情况下从套接字缓冲区中实际读取??因此,如果您愿意,可以迷惑内核:目的是在设计诸如在 Web 服务器上创建负载的工具时,不要浪费时间复制实际数据:我们需要正确进行 tcp 通信,但我们不需要数据已收到。有什么建议吗?
【问题讨论】:
-
也许您正在寻找零拷贝技术。在这种情况下,与您的操作系统相对应的标签会很有帮助en.wikipedia.org/wiki/Zero-copy
-
@Kira 感谢您的提示。虽然这不是我的想法(它在内核和用户空间之间进行实际数据复制 - 只是不涉及 CPU,而我对用户空间中的数据不感兴趣) - 它仍然比 读或recv。知道 gnu linux 是否允许这样做吗?
-
这样的工具是无效的。如果您想测试负载下的行为,您必须测试所有内容,而不仅仅是您喜欢的部分。