如何拼接到socketfd?

时间:2017-06-13 13:09:03

标签: linux linux-kernel splice

提到的手册0可以在两个任意文件描述符之间传输数据,也可以传输到socketfd上。如果文件立即发送,则此方法有效。因此,文件大小必须低于PIPE_BUF_SZ(= 65536)。

但是,如何处理更大的文件?我想了解sendfile()系统调用的区别。你会如何重写splice()系统调用?

第二个拼接以sendfile()返回。我想这是因为socketfd不可寻找。

Invalid argument

1 个答案:

答案 0 :(得分:0)

sendfile() systemcall不检查filedescriptor是否可搜索。对fd的唯一检查是,如果你可以读到(FMODE_READ)到fd。

splice()会进行更多检查。其中,如果fd是可寻址的(FMODE_ P READ)/(FMODE_ P WRITE)。

这就是sendfile有效的原因,但是拼接不会。