Skip to content
  1. Dec 04, 2013
  2. Nov 27, 2013
  3. Nov 17, 2013
  4. Nov 14, 2013
  5. Nov 10, 2013
  6. Nov 04, 2013
    • Björn Stenberg's avatar
      connect: Add connection delay to Happy Eyeballs. · 02fbc26d
      Björn Stenberg authored
      This patch adds a 200ms delay between the first and second address
      family socket connection attempts.
      
      It also iterates over IP addresses in the order returned by the
      system, meaning most dual-stack systems will try IPv6 first.
      
      Additionally, it refactors the connect code, removing most code that
      handled synchronous connects. Since all sockets are now non-blocking,
      the logic can be made simpler.
      02fbc26d
  7. Nov 03, 2013
  8. Oct 29, 2013
  9. Oct 27, 2013
    • Björn Stenberg's avatar
      Typo fix in trynextip(). · 8230af0b
      Björn Stenberg authored
      8230af0b
    • Björn Stenberg's avatar
      Add "Happy Eyeballs" for IPv4/IPv6. · 7d7df831
      Björn Stenberg authored
      This patch invokes two socket connect()s nearly simultaneously, and
      the socket that is first connected "wins" and is subsequently used for
      the connection. The other is terminated.
      
      There is a very slight IPv4 preference, in that if both sockets connect
      simultaneously IPv4 is checked first and thus will win.
      7d7df831
  10. Oct 26, 2013
    • Daniel Stenberg's avatar
      FTP: make the data connection work when going through proxy · d44b0142
      Daniel Stenberg authored
      This is a regression since the switch to always-multi internally
      c4312741.
      
      Test 1316 was modified since we now clearly call the Curl_client_write()
      function when doing the LIST transfer part and then the
      handler->protocol says FTP and ftpc.transfertype is 'A' which implies
      text converting even though that the response is initially a HTTP
      CONNECT response in this case.
      d44b0142
  11. Jul 23, 2013
  12. Jun 20, 2013
    • Daniel Stenberg's avatar
      multi_socket: react on socket close immediately · 88c5c63f
      Daniel Stenberg authored
      As a remedy to the problem when a socket gets closed and a new one is
      opened with the same file descriptor number and as a result
      multi.c:singlesocket() doesn't detect the difference, the new function
      Curl_multi_closed() gets told when a socket is closed so that it can be
      removed from the socket hash. When the old one has been removed, a new
      socket should be detected fine by the singlesocket() on next invoke.
      
      Bug: http://curl.haxx.se/bug/view.cgi?id=1248
      Reported-by: Erik Johansson
      88c5c63f
  13. May 01, 2013
  14. Apr 08, 2013
  15. Apr 06, 2013
    • Kim Vandry's avatar
      connect: treat an interface bindlocal() problem as a non-fatal error · 090b55c1
      Kim Vandry authored
      I am using curl_easy_setopt(CURLOPT_INTERFACE, "if!something") to force
      transfers to use a particular interface but the transfer fails with
      CURLE_INTERFACE_FAILED, "Failed binding local connection end" if the
      interface I specify has no IPv6 address. The cause is as follows:
      
      The remote hostname resolves successfully and has an IPv6 address and an
      IPv4 address.
      
      cURL attempts to connect to the IPv6 address first.
      
      bindlocal (in lib/connect.c) fails because Curl_if2ip cannot find an
      IPv6 address on the interface.
      
      This is a fatal error in singleipconnect()
      
      This change will make cURL try the next IP address in the list.
      
      Also included are two changes related to IPv6 address scope:
      
      - Filter the choice of address in Curl_if2ip to only consider addresses
      with the same scope ID as the connection address (mismatched scope for
      local and remote address does not result in a working connection).
      
      - bindlocal was ignoring the scope ID of addresses returned by
      Curl_if2ip . Now it uses them.
      
      Bug: http://curl.haxx.se/bug/view.cgi?id=1189
      090b55c1
  16. Apr 02, 2013
    • Daniel Stenberg's avatar
      SO_SNDBUF: don't set SNDBUF for win32 versions vista or later · 43e045fc
      Daniel Stenberg authored
      The Microsoft knowledge-base article
      http://support.microsoft.com/kb/823764 describes how to use SNDBUF to
      overcome a performance shortcoming in winsock, but it doesn't apply to
      Windows Vista and later versions. If the described SNDBUF magic is
      applied when running on those more recent Windows versions, it seems to
      instead have the reversed effect in many cases and thus make libcurl
      perform less good on those systems.
      
      This fix thus adds a run-time version-check that does the SNDBUF magic
      conditionally depending if it is deemed necessary or not.
      
      Bug: http://curl.haxx.se/bug/view.cgi?id=1188
      Reported by: Andrew Kurushin
      Tested by: Christian Hägele
      43e045fc
  17. Mar 31, 2013
  18. Feb 05, 2013
  19. Feb 01, 2013
    • Daniel Stenberg's avatar
      singleipconnect: simplify and clean up · 56b7c87c
      Daniel Stenberg authored
      Remove timeout argument that's never used.
      
      Make the actual connection get detected on a single spot to reduce code
      duplication.
      
      Store the IPv6 state already when the connection is attempted.
      56b7c87c
  20. Jan 17, 2013
    • Daniel Stenberg's avatar
      always-multi: always use non-blocking internals · c4312741
      Daniel Stenberg authored
      Remove internal separated behavior of the easy vs multi intercace.
      curl_easy_perform() is now using the multi interface itself.
      
      Several minor multi interface quirks and bugs have been fixed in the
      process.
      
      Much help with debugging this has been provided by: Yang Tse
      c4312741
  21. Jan 08, 2013
    • Yang Tse's avatar
      build: fix circular header inclusion with other packages · 5a053ffe
      Yang Tse authored
      This commit renames lib/setup.h to lib/curl_setup.h and
      renames lib/setup_once.h to lib/curl_setup_once.h.
      
      Removes the need and usage of a header inclusion guard foreign
      to libcurl. [1]
      
      Removes the need and presence of an alarming notice we carried
      in old setup_once.h [2]
      
      ----------------------------------------
      
      1 - lib/setup_once.h used __SETUP_ONCE_H macro as header inclusion guard
          up to commit ec691ca3 which changed this to HEADER_CURL_SETUP_ONCE_H,
          this single inclusion guard is enough to ensure that inclusion of
          lib/setup_once.h done from lib/setup.h is only done once.
      
          Additionally lib/setup.h has always used __SETUP_ONCE_H macro to
          protect inclusion of setup_once.h even after commit ec691ca3, this
          was to avoid a circular header inclusion triggered when building a
          c-ares enabled version with c-ares sources available which also has
          a setup_once.h header. Commit ec691ca3 exposes the real nature of
          __SETUP_ONCE_H usage in lib/setup.h, it is a header inclusion guard
          foreign to libcurl belonging to c-ares's setup_once.h
      
          The renaming this commit does, fixes the circular header inclusion,
          and as such removes the need and usage of a header inclusion guard
          foreign to libcurl. Macro __SETUP_ONCE_H no longer used in libcurl.
      
      2 - Due to the circular interdependency of old lib/setup_once.h and the
          c-ares setup_once.h header, old file lib/setup_once.h has carried
          back from 2006 up to now days an alarming and prominent notice about
          the need of keeping libcurl's and c-ares's setup_once.h in sync.
      
          Given that this commit fixes the circular interdependency, the need
          and presence of mentioned notice is removed.
      
          All mentioned interdependencies come back from now old days when
          the c-ares project lived inside a curl subdirectory. This commit
          removes last traces of such fact.
      5a053ffe
  22. Jan 06, 2013
  23. Jan 03, 2013
    • Yang Tse's avatar
      build: rename 93 lib/*.c files · 5b6e7927
      Yang Tse authored
      93 lib/*.c source files renamed to use our standard naming scheme.
      
      This commit only does the file renaming.
      
      ----------------------------------------
      
        renamed:    lib/amigaos.c -> lib/curl_amigaos.c
        renamed:    lib/asyn-ares.c -> lib/curl_asyn_ares.c
        renamed:    lib/asyn-thread.c -> lib/curl_asyn_thread.c
        renamed:    lib/axtls.c -> lib/curl_axtls.c
        renamed:    lib/base64.c -> lib/curl_base64.c
        renamed:    lib/bundles.c -> lib/curl_bundles.c
        renamed:    lib/conncache.c -> lib/curl_conncache.c
        renamed:    lib/connect.c -> lib/curl_connect.c
        renamed:    lib/content_encoding.c -> lib/curl_content_encoding.c
        renamed:    lib/cookie.c -> lib/curl_cookie.c
        renamed:    lib/cyassl.c -> lib/curl_cyassl.c
        renamed:    lib/dict.c -> lib/curl_dict.c
        renamed:    lib/easy.c -> lib/curl_easy.c
        renamed:    lib/escape.c -> lib/curl_escape.c
        renamed:    lib/file.c -> lib/curl_file.c
        renamed:    lib/fileinfo.c -> lib/curl_fileinfo.c
        renamed:    lib/formdata.c -> lib/curl_formdata.c
        renamed:    lib/ftp.c -> lib/curl_ftp.c
        renamed:    lib/ftplistparser.c -> lib/curl_ftplistparser.c
        renamed:    lib/getenv.c -> lib/curl_getenv.c
        renamed:    lib/getinfo.c -> lib/curl_getinfo.c
        renamed:    lib/gopher.c -> lib/curl_gopher.c
        renamed:    lib/gtls.c -> lib/curl_gtls.c
        renamed:    lib/hash.c -> lib/curl_hash.c
        renamed:    lib/hmac.c -> lib/curl_hmac.c
        renamed:    lib/hostasyn.c -> lib/curl_hostasyn.c
        renamed:    lib/hostcheck.c -> lib/curl_hostcheck.c
        renamed:    lib/hostip.c -> lib/curl_hostip.c
        renamed:    lib/hostip4.c -> lib/curl_hostip4.c
        renamed:    lib/hostip6.c -> lib/curl_hostip6.c
        renamed:    lib/hostsyn.c -> lib/curl_hostsyn.c
        renamed:    lib/http.c -> lib/curl_http.c
        renamed:    lib/http_chunks.c -> lib/curl_http_chunks.c
        renamed:    lib/http_digest.c -> lib/curl_http_digest.c
        renamed:    lib/http_negotiate.c -> lib/curl_http_negotiate.c
        renamed:    lib/http_negotiate_sspi.c -> lib/curl_http_negotiate_sspi.c
        renamed:    lib/http_proxy.c -> lib/curl_http_proxy.c
        renamed:    lib/idn_win32.c -> lib/curl_idn_win32.c
        renamed:    lib/if2ip.c -> lib/curl_if2ip.c
        renamed:    lib/imap.c -> lib/curl_imap.c
        renamed:    lib/inet_ntop.c -> lib/curl_inet_ntop.c
        renamed:    lib/inet_pton.c -> lib/curl_inet_pton.c
        renamed:    lib/krb4.c -> lib/curl_krb4.c
        renamed:    lib/krb5.c -> lib/curl_krb5.c
        renamed:    lib/ldap.c -> lib/curl_ldap.c
        renamed:    lib/llist.c -> lib/curl_llist.c
        renamed:    lib/md4.c -> lib/curl_md4.c
        renamed:    lib/md5.c -> lib/curl_md5.c
        renamed:    lib/memdebug.c -> lib/curl_memdebug.c
        renamed:    lib/mprintf.c -> lib/curl_mprintf.c
        renamed:    lib/multi.c -> lib/curl_multi.c
        renamed:    lib/netrc.c -> lib/curl_netrc.c
        renamed:    lib/non-ascii.c -> lib/curl_non_ascii.c
        renamed:    lib/curl_non-ascii.h -> lib/curl_non_ascii.h
        renamed:    lib/nonblock.c -> lib/curl_nonblock.c
        renamed:    lib/nss.c -> lib/curl_nss.c
        renamed:    lib/nwlib.c -> lib/curl_nwlib.c
        renamed:    lib/nwos.c -> lib/curl_nwos.c
        renamed:    lib/openldap.c -> lib/curl_openldap.c
        renamed:    lib/parsedate.c -> lib/curl_parsedate.c
        renamed:    lib/pingpong.c -> lib/curl_pingpong.c
        renamed:    lib/polarssl.c -> lib/curl_polarssl.c
        renamed:    lib/pop3.c -> lib/curl_pop3.c
        renamed:    lib/progress.c -> lib/curl_progress.c
        renamed:    lib/qssl.c -> lib/curl_qssl.c
        renamed:    lib/rawstr.c -> lib/curl_rawstr.c
        renamed:    lib/rtsp.c -> lib/curl_rtsp.c
        renamed:    lib/security.c -> lib/curl_security.c
        renamed:    lib/select.c -> lib/curl_select.c
        renamed:    lib/sendf.c -> lib/curl_sendf.c
        renamed:    lib/share.c -> lib/curl_share.c
        renamed:    lib/slist.c -> lib/curl_slist.c
        renamed:    lib/smtp.c -> lib/curl_smtp.c
        renamed:    lib/socks.c -> lib/curl_socks.c
        renamed:    lib/socks_gssapi.c -> lib/curl_socks_gssapi.c
        renamed:    lib/socks_sspi.c -> lib/curl_socks_sspi.c
        renamed:    lib/speedcheck.c -> lib/curl_speedcheck.c
        renamed:    lib/splay.c -> lib/curl_splay.c
        renamed:    lib/ssh.c -> lib/curl_ssh.c
        renamed:    lib/sslgen.c -> lib/curl_sslgen.c
        renamed:    lib/ssluse.c -> lib/curl_ssluse.c
        renamed:    lib/strdup.c -> lib/curl_strdup.c
        renamed:    lib/strequal.c -> lib/curl_strequal.c
        renamed:    lib/strerror.c -> lib/curl_strerror.c
        renamed:    lib/strtok.c -> lib/curl_strtok.c
        renamed:    lib/strtoofft.c -> lib/curl_strtoofft.c
        renamed:    lib/telnet.c -> lib/curl_telnet.c
        renamed:    lib/tftp.c -> lib/curl_tftp.c
        renamed:    lib/timeval.c -> lib/curl_timeval.c
        renamed:    lib/transfer.c -> lib/curl_transfer.c
        renamed:    lib/url.c -> lib/curl_url.c
        renamed:    lib/version.c -> lib/curl_version.c
        renamed:    lib/warnless.c -> lib/curl_warnless.c
        renamed:    lib/wildcard.c -> lib/curl_wildcard.c
      
      ----------------------------------------
      5b6e7927
  24. Dec 28, 2012
  25. Dec 14, 2012
  26. Dec 07, 2012
    • Linus Nielsen's avatar
      Introducing a new persistent connection caching system using "bundles". · d021f2e8
      Linus Nielsen authored
      A bundle is a list of all persistent connections to the same host.
      The connection cache consists of a hash of bundles, with the
      hostname as the key.
      The benefits may not be obvious, but they are two:
      
      1) Faster search for connections to reuse, since the hash
         lookup only finds connections to the host in question.
      2) It lays out the groundworks for an upcoming patch,
         which will introduce multiple HTTP pipelines.
      
      This patch also removes the awkward list of "closure handles",
      which were needed to send QUIT commands to the FTP server
      when closing a connection.
      Now we allocate a separate closure handle and use that
      one to close all connections.
      
      This has been tested in a live system for a few weeks, and of
      course passes the test suite.
      d021f2e8
  27. Nov 07, 2012
  28. Jul 22, 2012
  29. Jun 12, 2012
  30. Jun 11, 2012
    • Marc Hoersken's avatar
      connect.c/ftp.c: Fixed dereferencing pointer breakin strict-aliasing · 9c94236e
      Marc Hoersken authored
      Fixed warning: dereferencing pointer does break strict-aliasing rules
      by using a union instead of separate pointer variables.
      Internal union sockaddr_u could probably be moved to generic header.
      Thanks to Paul Howarth for the hint about using unions for this.
      
      Important for winbuild: Separate declaration of sockaddr_u pointer.
      The pointer variable *sock cannot be declared and initialized right
      after the union declaration. Therefore it has to be a separate statement.
      9c94236e
  31. Apr 19, 2012
  32. Apr 03, 2012
  33. Mar 20, 2012
  34. Mar 16, 2012
  35. Feb 09, 2012
    • Dave Reisner's avatar
      add library support for tuning TCP_KEEPALIVE · 705f0f7a
      Dave Reisner authored
      This adds three new options to control the behavior of TCP keepalives:
      
      - CURLOPT_TCP_KEEPALIVE: enable/disable probes
      - CURLOPT_TCP_KEEPIDLE: idle time before sending first probe
      - CURLOPT_TCP_KEEPINTVL: delay between successive probes
      
      While not all operating systems support the TCP_KEEPIDLE and
      TCP_KEEPINTVL knobs, the library will still allow these options to be
      set by clients, silently ignoring the values.
      705f0f7a