splice()/tee() 是否可以与套接字一起使用,而不仅仅是管道?

splice()/tee() 是否可以与套接字一起使用,而不仅仅是管道?

在 Linux 上,系统调用 splice(2) 和 tee(2) 用于在两个文件描述符之间传输数据。根据文档,一个或两个文件描述符必须是管道。为什么?这可以与套接字一起使用吗?目前它可以工作吗?或者需要修改内核吗?

答案1

现在他们只是将管道缓冲区拼接在一起;套接字缓冲区(在 Linux 上)是不同的动物,并将内核网络拖入其中。将其限制为AF_LOCAL套接字会简化实现,但代价是验证复杂化 - 并且您可能仍然需要通过网络缓冲区管理子系统而不是匿名文件缓冲区来处理它们的分配和映射。

相关内容