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 "[EMAIL PROTECTED]"
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "[EMAIL PROTECTED]"