Update: Debox sendfile modifications
is at rambler-co.ru
Sun Nov 9 04:18:37 PST 2003
On Sat, 8 Nov 2003, John-Mark Gurney wrote:
> Igor Sysoev wrote this message on Wed, Nov 05, 2003 at 12:31 +0300:
> > I think it can done in the following way - a socket should have flag
> > that says that sendfile() had started the reading a page.
> layer violation...
I do not think that it's layer violation. sendfile() works with
descriptor so it should know its state. It should know wheather
descriptor is non-blocking or has it enough buffer space.
> how do you know that the fd is a socket?
fp->f_type == DTYPE_SOCKET
> > select()/poll()/kevent() should check this flag before the checking
> > a socket buffer space. When the page had been read this flag is reset.
> So, what about using sendfile on a pipe? are you going to teach sendfile
> how to interact with pipe's too? What about other fd types?
> If you made this a fd transparent operation then I would agree with
The current sendfile() implementation works with sockets only.
Well, I agree that such sendfile() implementation is a hack.
Nowever this implementation is very usefull in the real world -
it allows to minimize a data copy in http and ftp servers.
I just could not figure to myself where can be usefull the
high perfomance sendfile() to a pipe.
I think that it's better to leave sendfile() as a sending to a socket
only hack. I believe that any sendfile() generalization (e.g. sending
data from a socket to a file) is useless.
More information about the freebsd-hackers