retry: consider retrying even if -f is used
authorDaniel Stenberg <daniel@haxx.se>
Sun, 1 Aug 2010 22:10:18 +0000 (00:10 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Sun, 1 Aug 2010 22:10:18 +0000 (00:10 +0200)
The --retry logic does retry HTTP when some specific response codes are
returned, but because the -f option sets the CURLOPT_FAILONERROR to
libcurl, the return codes are different for such situations and then the
curl tool failed to consider it for retrying.

Reported by: Mike Power
Bug: http://curl.haxx.se/bug/view.cgi?id=3037362

src/main.c

index f35fc62..5585c17 100644 (file)
@@ -5439,8 +5439,12 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
             if(CURLE_OPERATION_TIMEDOUT == res)
               /* retry timeout always */
               retry = RETRY_TIMEOUT;
-            else if(CURLE_OK == res) {
-              /* Check for HTTP transient errors */
+            else if((CURLE_OK == res) ||
+                    (config->failonerror &&
+                     (CURLE_HTTP_RETURNED_ERROR == res))) {
+              /* If it returned OK. _or_ failonerror was enabled and it
+                 returned due to such an error, check for HTTP transient
+                 errors to retry on. */
               char *this_url=NULL;
               curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &this_url);
               if(this_url &&