【问题标题】:Zero copy receive function零拷贝接收功能
【发布时间】:2013-07-18 17:50:34
【问题描述】:

我正在尝试实现零复制机制,即与TransmitFile() API 相反的功能。

但我不知道如何在内核中注册缓冲区。以下是我想要实现零拷贝的详细信息:

  1. 我们将在我们的客户端缓冲区中收到来自服务器的大量数据,我也怀疑天气数据将进入套接字缓冲区(客户端)还是首先进入 NIC 缓冲区,请清除这个疑问也。

  2. 现在我想从套接字缓冲区将数据直接复制到内核缓冲区,然后复制到磁盘中的文件,而不进行读写系统调用,即不切换上下文。

  3. 只能将数据直接移动到内核空间内的内核缓冲区。

是否有任何 API 或某种方法可以实现这一点?还有其他建议吗?

套接字在 TCP/IP 连接上。

【问题讨论】:

  • 你说的是哪个内核?什么是“TransmitFile() API”?更多细节会很好。
  • 要么您将第三方的东西归因于 C++ 本身,要么您只是忘记了我们并非都在与您在同一个项目上工作。敞开心扉!告诉我们你在说什么。
  • 你的硬件是什么?
  • 好吧,我不知道我正在使用 Windows 7,无论它使用的是哪个内核。对于 Transmit File() API,请参阅此链接:msdn.microsoft.com/en-us/library/windows/desktop/…
  • @Satya:别厚脸皮;你来这里是为了免费帮助。当然,在过去 23 小时内发布的关于这个问题的大量答案(阅读:none)表明“其他人知道 [你] 在说什么”。

标签: c++ windows winapi zero-copy


【解决方案1】:

不幸的是,没有任何 API 可以接收。但是您可以尝试 ZwWrite()。

【讨论】:

  • 是的,它可能会有所帮助......但对于像我这样的初学者来说,这很难理解。顺便说一句,谢谢
  • 欢迎...继续努力
猜你喜欢
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 1970-01-01
  • 2016-04-18
  • 2014-10-25
  • 2011-02-15
相关资源
最近更新 更多