Update: Debox sendfile modifications

Igor Sysoev 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
> it.

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.


Igor Sysoev
http://sysoev.ru/en/



More information about the freebsd-hackers mailing list