- Christopher Palow fixed a curl_multi_socket() issue which previous caused
authorDaniel Stenberg <daniel@haxx.se>
Thu, 19 Jun 2008 21:32:51 +0000 (21:32 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Thu, 19 Jun 2008 21:32:51 +0000 (21:32 +0000)
  libcurl to not tell the app properly when a socket was closed (when the name
  resolve done by c-ares is done) and then immediately re-created and put to
  use again (for the actual connection). Since the closure will make the
  "watch status" get lost in several event-based systems libcurl will need to
  tell the app about this close/re-create case.

CHANGES
RELEASE-NOTES
lib/multi.c

diff --git a/CHANGES b/CHANGES
index 1d13757..b6a311c 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -7,6 +7,13 @@
                                   Changelog
 
 Daniel Stenberg (19 Jun 2008)
+- Christopher Palow fixed a curl_multi_socket() issue which previous caused
+  libcurl to not tell the app properly when a socket was closed (when the name
+  resolve done by c-ares is done) and then immediately re-created and put to
+  use again (for the actual connection). Since the closure will make the
+  "watch status" get lost in several event-based systems libcurl will need to
+  tell the app about this close/re-create case.
+
 - Dengminwen found a bug in the connection re-use function when using the
   multi interface with pipelining enabled as it would wrongly check for,
   detect and close "dead connections" even though that connection was already
index 3201397..cf04e5d 100644 (file)
@@ -21,6 +21,7 @@ This release includes the following bugfixes:
  o Fixed curl-config --ca
  o Fixed the multi interface connection re-use with NSS-built libcurl
  o connection re-use when using the multi interface with pipelining enabled
+ o curl_multi_socket() socket callback fix for close/re-create sockets case
 
 This release includes the following known bugs:
 
@@ -38,6 +39,6 @@ This release would not have looked like this without help, code, reports and
 advice from friends like these:
 
  Lenny Rachitsky, Axel Tillequin, Arnaud Ebalard, Yang Tse, Dan Fandrich,
- Rob Crittenden, Dengminwen
+ Rob Crittenden, Dengminwen, Christopher Palow
 
         Thanks! (and sorry if I forgot to mention someone)
index 3b78316..f0a7bfb 100644 (file)
@@ -965,6 +965,11 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
       easy->result = Curl_is_resolved(easy->easy_conn, &dns);
 
       if(dns) {
+        /* Update sockets here. Mainly because the socket(s) may have been
+           closed and the application thus needs to be told, even if it is
+           likely that the same socket(s) will again be used further down. */
+        singlesocket(multi, easy);
+
         /* Perform the next step in the connection phase, and then move on
            to the WAITCONNECT state */
         easy->result = Curl_async_resolved(easy->easy_conn,