Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 9 Nov 2003 15:16:55 +0300 (MSK)
From:      Igor Sysoev <is@rambler-co.ru>
To:        John-Mark Gurney <gurney_j@efn.org>
Cc:        Alan Cox <alc@cs.rice.edu>
Subject:   Re: Update: Debox sendfile modifications
Message-ID:  <Pine.BSF.4.21.0311091515470.18994-100000@is.park.rambler.ru>
In-Reply-To: <20031109033026.GF558@funkthat.com>

next in thread | previous in thread | raw e-mail | index | archive | help
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/



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.21.0311091515470.18994-100000>