On Wed, Apr 29, 2009 at 09:42:55PM +0200, Max Kellermann wrote: > On 2009/04/29 17:23, Andi Kleen wrote: > > I don't think splice is about handling all possible cases, > > but just cases where the kernel can do better than user space. > > I don't think that's the case here. > > If splice() is about passing pointers of a pipe buffer, what's more > trivial (and natural) than passing that pointer between two pipes? > > > > when I read about the splice() system call, I thought it was obvious > > > that it could copy data between two pipes. > > > > It would be more efficient if you used fd passing to pass the fd > > around to the other process and let it read directly. > > That's not so easy in my case. The header output of the one process > has to be parsed before the rest of it (or part of the rest) is going > to be forwarded to the second one. My master process would lose > control over the transfer. splice() looks like the perfect solution. indeed, that could make sense. From what I have seen in the splicing code, I think tht implementing pipe to pipe should not be *that* hard, starting from existing code (eg: net to pipe). Maybe you could try to implement it since you have the code which makes use of it ? I think it is the kind of feature which can only improve step by step based on application needs. BTW, I like your test program. Simple and easy. I have completed it to test tcp and udp, you can find it attached. Regards, Willy