Skip to content
  • Peter Wu's avatar
    libcurl: add UNIX domain sockets support · 970c22f9
    Peter Wu authored
    The ability to do HTTP requests over a UNIX domain socket has been
    requested before, in Apr 2008 [0][1] and Sep 2010 [2]. While a
    discussion happened, no patch seems to get through. I decided to give it
    a go since I need to test a nginx HTTP server which listens on a UNIX
    domain socket.
    
    One patch [3] seems to make it possible to use the
    CURLOPT_OPENSOCKETFUNCTION function to gain a UNIX domain socket.
    Another person wrote a Go program which can do HTTP over a UNIX socket
    for Docker[4] which uses a special URL scheme (though the name contains
    cURL, it has no relation to the cURL library).
    
    This patch considers support for UNIX domain sockets at the same level
    as HTTP proxies / IPv6, it acts as an intermediate socket provider and
    not as a separate protocol. Since this feature affects network
    operations, a new feature flag was added ("unix-sockets") with a
    corresponding CURL_VERSION_UNIX_SOCKETS macro.
    
    A new CURLOPT_UNIX_SOCKET_PATH option is added and documented. This
    option enables UNIX domain sockets support for all requests on the
    handle (replacing IP sockets and skipping proxies).
    
    A new configure option (--enable-unix-sockets) and CMake option
    (ENABLE_UNIX_SOCKETS) can disable this optional feature. Note that I
    deliberately did not mark this feature as advanced, this is a
    feature/component that should easily be available.
    
     [0]: http://curl.haxx.se/mail/lib-2008-04/0279.html
     [1]: http://daniel.haxx.se/blog/2008/04/14/http-over-unix-domain-sockets/
     [2]: http://sourceforge.net/p/curl/feature-requests/53/
     [3]: http://curl.haxx.se/mail/lib-2008-04/0361.html
     [4]: https://github.com/Soulou/curl-unix-socket
    
    
    
    Signed-off-by: default avatarPeter Wu <peter@lekensteyn.nl>
    970c22f9