• Show log

    Commit

  • Hash : 0ba0af9c
    Author : Nick Mathewson
    Date : 2011-09-29T09:30:04

    Prefer mmap to sendfile unless a DRAINS_TO_FD flag is set. Allows add_file to work with SSL.
    
    The sendfile() implementation for evbuffer_add_file is potentially more
    efficient, but it has a problem: you can only use it to send bytes over
    a socket using sendfile().  If you are writing bytes via SSL_send() or
    via a filter, or if you need to be able to inspect your buffer, it
    doesn't work.
    
    As an easy fix, this patch disables the sendfile-based implementation of
    evbuffer_add_file on an evbuffer unless the user sets a new
    EVBUFFER_FLAG_DRAINS_TO_FD flag on that evbuffer, indicating that the
    evbuffer will not be inspected, but only written out via
    evbuffer_write(), evbuffer_write_atmost(), or drained with stuff like
    evbuffer_drain() or evbuffer_add_buffer().  This flag is off by
    default, except for evbuffers used for output on bufferevent_socket.
    
    In the future, it could be interesting to make a best-effort file
    segment implementation that tries to send via sendfile, but mmaps on
    demand.  That's too much complexity for a stable release series, though.