Emil Engler via curl-library <curl-library@cool.haxx.se> wrote:
> Hello curl-library,
> I recently thought about implementing the syscall sendfile(2) into
> libcurl to speed up downloads to a file. For those of you who don't
> know what it is:

"downloads to a file"?  Meaning socket => regular file?
I hope I understand you correctly, since...

> sendfile() copies data between one file descriptor and another.
> Because this copying is done within the kernel, sendfile() is more 
> efficient than the combination of read(2) and write(2), 
> which would require transferring data to and from user space.
> 
> From https://linux.die.net/man/2/sendfile

Which says:

  The   in_fd   argument   must  correspond  to  a  file  which  supports
  mmap(2)-like operations (i.e., it cannot be a socket).

So curl, as an HTTP/FTP/etc. client would only benefit using
sendfile to upload (e.g. curl -T $FILE), not download.

> However implementing this syscall also raises some problems, including
> limited support. AFAIK only Linux and FreeBSD support this syscall
> (maybe even macOS as it inherited a lot from FreeBSD).
> The lack of standardization also leads to the problem that the syscall
> might differ on the platforms where it is supported.
> 
> So my idea would be to implement that feature and disable it for now
> by using a configure option. Has someone already pitched the idea
> in the past? If so, I would be happy for a link to this thread :-)

Based on my past experiences on the server side, sendfile was
often a source of bugs, especially on BSDs.  It's gotten better
over the years, but it's also less relevant now that TLS is
popular.

Maybe it still makes sense with --proxy talking to localhost
(e.g. Tor) or on private networks (VPNs, LANs), but only for
uploads...
-------------------------------------------------------------------
Unsubscribe: https://cool.haxx.se/list/listinfo/curl-library
Etiquette:   https://curl.se/mail/etiquette.html

Reply via email to