[lkml]   [2007]   [Aug]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
SubjectRe: splice question
On Sun, Aug 12, 2007 at 12:41:54PM -0700, Linus Torvalds wrote:
>On Sun, 12 Aug 2007, David H?rdeman wrote:
>> Otherwise I guess I'd have to add a second pipe, then (in a loop)
>> tee() from the first to the second pipe and then splice from the second pipe
>> to a socket. Doesn't sound very elegant and would need quite a lot of extra
>> syscalls.
>You really should think of this as a memcpy(), and you'll be in the right
>mindframe. The system calls themselves are cheap.

Ok, I've implemented it using two pipes, and it works. But it does seem
a bit case one client is not keeping up, the data will
have to be tee():ed first from pipe1 to pipe2, only to then find out
that the splice() from pipe2 to socket only does a partial transfer
after which the data in pipe2 has to be thrown away and then the loop
starts over with the next client.

A tee() from pipe1 to the socket could (I imagine) realize immediately
that the socket does not have enough buffer space and return EWOULDBLOCK
and avoid at least one copy?

David Härdeman
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to
More majordomo info at
Please read the FAQ at

 \ /
  Last update: 2007-08-12 22:59    [from the cache]
©2003-2014 Jasper Spaans. hosted at Digital Ocean