Date: Thu, 20 Jul 2006 09:59:19 -0700 From: Julian Elischer <julian@elischer.org> To: "David G. Lawrence" <dg@dglawrence.com> Cc: Mikhail Teterin <mi+mx@aldan.algebra.com>, net@freebsd.org Subject: Re: complement to sendfile()? Message-ID: <44BFB667.60106@elischer.org> In-Reply-To: <20060720025003.GF924@tnn.dglawrence.com> References: <200607192230.14939.mi%2Bmx@aldan.algebra.com> <20060720025003.GF924@tnn.dglawrence.com>
next in thread | previous in thread | raw e-mail | index | archive | help
David G. Lawrence wrote: >>Hello! >> >>My program receives data from the socket and writes it to a file -- with the >>usual read()/write() tedium. >> >>Is there anything zero-copying like sendfile() for the socket->file direction? >> >>In fact, sendfile's API may allow to use it in any direction, but the manual >>is quite explicit, that the second (destination) argument must be socket. >> >>recvfile()? Thanks! >> >> > > sendfile() could be extended to allow arbitrary file descriptor types as >the source and destination, but the zero-copy nature of it can only work >in the file to socket direction. This is because network buffers can be made >out of filesystem buffers (file->network direction), but for the network to >file direction network packets arrive non-deterministically. With the right >network hardware it would in theory be possible to have the TCP code run >on the network card and it could DMA the TCP stream directly into file >buffers. If pigs had wings, they could fly. :-) > > We used to do something like this in BSD4.3 (not FreeBSD 4.3) in 1991, but we used a propriatary filesystem and a proprietary protocol that knew each other's data types. >-DG > >David G. Lawrence >President >Download Technologies, Inc. - http://www.downloadtech.com - (866) 399 8500 >The FreeBSD Project - http://www.freebsd.org >Pave the road of life with opportunities. >_______________________________________________ >freebsd-net@freebsd.org mailing list >http://lists.freebsd.org/mailman/listinfo/freebsd-net >To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org" > >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?44BFB667.60106>