From 0f89a2e639f002df48bd43726818410439e24dd4 Mon Sep 17 00:00:00 2001
From: Daniel Stenberg <daniel@haxx.se>
Date: Sat, 22 Sep 2007 21:04:16 +0000
Subject: [PATCH] Steinar H. Gunderson modified c-ares to now also do to DNS
 retries even when TCP is used since there are several edge cases where it
 still makes sense.

---
 ares/CHANGES        | 3 +++
 ares/ares_process.c | 9 ++++++---
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/ares/CHANGES b/ares/CHANGES
index 160489c64c..4f28e3b4ca 100644
--- a/ares/CHANGES
+++ b/ares/CHANGES
@@ -2,6 +2,9 @@
 
 * September 22 2007 (Daniel Stenberg)
 
+- Steinar H. Gunderson modified c-ares to now also do to DNS retries even when
+  TCP is used since there are several edge cases where it still makes sense.
+
 - Brad House provided a fix for ares_save_options():
 
   Apparently I overlooked something with the ares_save_options() where it
diff --git a/ares/ares_process.c b/ares/ares_process.c
index e8b9ef6fa7..66007f0fb2 100644
--- a/ares/ares_process.c
+++ b/ares/ares_process.c
@@ -504,9 +504,12 @@ static struct query *next_server(ares_channel channel, struct query *query, time
         }
       query->server = 0;
 
-      /* Only one try if we're using TCP. */
-      if (query->using_tcp)
-        break;
+      /* You might think that with TCP we only need one try. However,
+       * even when using TCP, servers can time-out our connection just
+       * as we're sending a request, or close our connection because
+       * they die, or never send us a reply because they get wedged or
+       * tickle a bug that drops our request.
+       */
     }
   return end_query(channel, query, query->error_status, NULL, 0);
 }
-- 
GitLab