From fe06127dedfc0047c9e748658f23d52f32117055 Mon Sep 17 00:00:00 2001 From: Jay Satiro Date: Fri, 10 Oct 2025 15:42:27 -0400 Subject: [PATCH] tool_operate: retry on HTTP response codes 522 and 524 - Treat HTTP response codes 522 and 524 as a transient error since Cloudflare may use them instead of 504 to signal timeout. For example here is a 522 error message from Cloudflare: "The initial connection between Cloudflare's network and the origin web server timed out. As a result, the web page can not be displayed." Prior to this change the curl tool did not retry on HTTP response codes 522 and 524 when --retry was used. Fixes https://github.com/curl/curl/discussions/16143 Closes https://github.com/curl/curl/pull/19011 --- docs/cmdline-opts/retry.md | 4 ++-- src/tool_operate.c | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/cmdline-opts/retry.md b/docs/cmdline-opts/retry.md index f55d8edcca..4d9e83cd5f 100644 --- a/docs/cmdline-opts/retry.md +++ b/docs/cmdline-opts/retry.md @@ -20,8 +20,8 @@ Example: If a transient error is returned when curl tries to perform a transfer, it retries this number of times before giving up. Setting the number to 0 makes curl do no retries (which is the default). Transient error means either: a -timeout, an FTP 4xx response code or an HTTP 408, 429, 500, 502, 503 or 504 -response code. +timeout, an FTP 4xx response code or an HTTP 408, 429, 500, 502, 503, 504, 522 +or 524 response code. When curl is about to retry a transfer, it first waits one second and then for all forthcoming retries it doubles the waiting time until it reaches 10 diff --git a/src/tool_operate.c b/src/tool_operate.c index 397b2159e1..c7d01bb59a 100644 --- a/src/tool_operate.c +++ b/src/tool_operate.c @@ -412,6 +412,8 @@ static CURLcode retrycheck(struct OperationConfig *config, case 502: /* Bad Gateway */ case 503: /* Service Unavailable */ case 504: /* Gateway Timeout */ + case 522: /* Connection Timed Out (Cloudflare) */ + case 524: /* Proxy Read Timeout (Cloudflare) */ retry = RETRY_HTTP; /* * At this point, we have already written data to the output -- 2.47.3