server: Implement Server._get_file
authorW. Trevor King <wking@tremily.us>
Thu, 20 Feb 2014 20:16:47 +0000 (12:16 -0800)
committerW. Trevor King <wking@tremily.us>
Thu, 20 Feb 2014 20:45:19 +0000 (12:45 -0800)
commit1d56acc9a6cda51549f2fcbdc05d9b2d7edbb2cd
tree188509d63d9655256a679b6421395fe75dc98d10
parent1b6b3a007ff24c92fac413c21dbd694c0d2b685f
server: Implement Server._get_file

It would be nice to use sendfile to copy between the HTTPResponse
object [1] and the cache file.  Linux supports arbitrary files (not
just sockets) for out_fd since 2.6.33, so the "to the cache file" side
works.  However, from sendfile(2) [2]:

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

So reading from the HTTPResponse is not going to happen (yet).  Once
Linux gains support for socket in_fd, we could use something like:

    _os.sendfile(
        f.fileno(), response.fileno(), offset=None, count=content_length)

[1]: http://docs.python.org/3/library/http.client.html#httpresponse-objects
[2]: http://man7.org/linux/man-pages/man2/sendfile.2.html
package_cache/server.py