It's very intentional.
You should think of "tee()" as a memcpy() on kernel buffers.
And what are kernel buffers? It's not a socket.
The "kernel buffer" is simply just another name for a pipe.
So tee() *duplicates* the data in pipe, and then you can use "splice()" on
the duplicated data to actually send it off somewhere else (eg a socket).
(Or any other pipe operation, for that matter - you can read() it into
user space etc).
You really should think of this as a memcpy(), and you'll be in the right
mindframe. The system calls themselves are cheap.
Linus
-