给定两个网络套接字,在不以任何方式接触内容的情况下将数据从一个传输到另一个的最有效方法是什么?
有没有一种方法(系统调用 API)可以在内核空间中管理套接字到套接字的数据管道,类似于
splice
provides on Linux ? 这就是我目前在 Haskell 中使用splice
的方式:Using GNU/Linux system call `splice` for zero-copy Socket to Socket data transfers in Haskell .
最佳答案
Windows 上的零拷贝 API 称为 TransmitFile。它读取一个文件句柄并写入一个套接字——它通常用于从 Web 服务器提供静态文件。我认为您可以提供一个套接字句柄作为文件句柄,因为您通常可以这样做,即使在 Windows 上也是如此。如果是这样,那应该可以解决您的问题。我不确定,因为我没有尝试过,而且文档在这一点上没有明确说明。不过,它是 零拷贝 API,所以如果它不起作用,呃,它肯定应该这样做。
关于windows - Windows 上两个网络套接字之间的管道数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10087945/