1. 04 Dec, 2014 7 commits
    • Peter Wu's avatar
      tool: add --unix-socket option · c8644d1f
      Peter Wu authored
      
      
      Signed-off-by: default avatarPeter Wu <peter@lekensteyn.nl>
      c8644d1f
    • 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
    • Peter Wu's avatar
      tests: add two HTTP over UNIX socket tests · 479abdd3
      Peter Wu authored
      
      
      test1435: a simple test that checks whether a HTTP request can be
      performed over the UNIX socket. The hostname/port are interpreted
      by sws and should be ignored by cURL.
      
      test1436: test for the ability to do two requests to the same host,
      interleaved with one to a different hostname.
      
      Signed-off-by: default avatarPeter Wu <peter@lekensteyn.nl>
      479abdd3
    • Peter Wu's avatar
      tests: add HTTP UNIX socket server testing support · f1cc2a2c
      Peter Wu authored
      
      
      The variable `$ipvnum` can now contain "unix" besides the integers 4
      and 6 since the variable. Functions which receive this parameter
      have their `$port` parameter renamed to `$port_or_path` to support a
      path to the UNIX domain socket (as a "port" is only meaningful for TCP).
      
      Signed-off-by: default avatarPeter Wu <peter@lekensteyn.nl>
      f1cc2a2c
    • Peter Wu's avatar
      sws: try to remove socket and retry bind · 99fb3679
      Peter Wu authored
      
      
      If sws is killed it might leave a stale socket file on the filesystem
      which would cause an EADDRINUSE error. After this patch, it is checked
      whether the socket is really stale and if so, the socket file gets
      removed and another bind is executed.
      
      Signed-off-by: default avatarPeter Wu <peter@lekensteyn.nl>
      99fb3679
    • Peter Wu's avatar
      sws: add UNIX domain socket support · e9c7a862
      Peter Wu authored
      
      
      This extends sws with a --unix-socket option which causes the port to
      be ignored (as the server now listens on the path specified by
      --unix-socket). This feature will be available in the following patch
      that enables checking for UNIX domain socket support.
      
      Proxy support (CONNECT) is not considered nor tested. It does not make
      sense anyway, first connecting through a TCP proxy, then let that TCP
      proxy connect to a UNIX socket.
      
      Signed-off-by: default avatarPeter Wu <peter@lekensteyn.nl>
      e9c7a862
    • Peter Wu's avatar
      sws: restrict TCP_NODELAY to IP sockets · fb7d7e00
      Peter Wu authored
      
      
      TCP_NODELAY does not make sense for Unix sockets, so enable it only if
      the socket is using IP.
      
      Signed-off-by: default avatarPeter Wu <peter@lekensteyn.nl>
      fb7d7e00
  2. 03 Dec, 2014 8 commits
  3. 02 Dec, 2014 5 commits
  4. 01 Dec, 2014 1 commit
  5. 30 Nov, 2014 19 commits