[llvm] [llvm][SupportHTTP] Apply WinHTTP timeout setting after WinHttpOpen (PR #188969)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 27 04:30:27 PDT 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-support
Author: Stefan Gränitz (weliveindetail)
<details>
<summary>Changes</summary>
`setTimeout()` required the session handle, but it was only created inside `HTTPClient::perform()`. This patch stores the incoming value and applies it after the session handle is created with `WinHttpOpen()`.
---
Full diff: https://github.com/llvm/llvm-project/pull/188969.diff
1 Files Affected:
- (modified) llvm/lib/Support/HTTP/HTTPClient.cpp (+12-9)
``````````diff
diff --git a/llvm/lib/Support/HTTP/HTTPClient.cpp b/llvm/lib/Support/HTTP/HTTPClient.cpp
index ce6820dfb1f5a..66286210c4347 100644
--- a/llvm/lib/Support/HTTP/HTTPClient.cpp
+++ b/llvm/lib/Support/HTTP/HTTPClient.cpp
@@ -154,6 +154,7 @@ struct WinHTTPSession {
HINTERNET ConnectHandle = nullptr;
HINTERNET RequestHandle = nullptr;
DWORD ResponseCode = 0;
+ DWORD TimeoutMs = 0;
~WinHTTPSession() {
if (RequestHandle)
@@ -225,15 +226,7 @@ void HTTPClient::cleanup() {
void HTTPClient::setTimeout(std::chrono::milliseconds Timeout) {
WinHTTPSession *Session = static_cast<WinHTTPSession *>(Handle);
- if (Session && Session->SessionHandle) {
- DWORD TimeoutMs = static_cast<DWORD>(Timeout.count());
- WinHttpSetOption(Session->SessionHandle, WINHTTP_OPTION_CONNECT_TIMEOUT,
- &TimeoutMs, sizeof(TimeoutMs));
- WinHttpSetOption(Session->SessionHandle, WINHTTP_OPTION_RECEIVE_TIMEOUT,
- &TimeoutMs, sizeof(TimeoutMs));
- WinHttpSetOption(Session->SessionHandle, WINHTTP_OPTION_SEND_TIMEOUT,
- &TimeoutMs, sizeof(TimeoutMs));
- }
+ Session->TimeoutMs = static_cast<DWORD>(Timeout.count());
}
Error HTTPClient::perform(const HTTPRequest &Request,
@@ -265,6 +258,16 @@ Error HTTPClient::perform(const HTTPRequest &Request,
if (!Session->SessionHandle)
return createStringError(errc::io_error, "Failed to open WinHTTP session");
+ // Apply timeout if configured
+ if (Session->TimeoutMs > 0) {
+ WinHttpSetOption(Session->SessionHandle, WINHTTP_OPTION_CONNECT_TIMEOUT,
+ &Session->TimeoutMs, sizeof(Session->TimeoutMs));
+ WinHttpSetOption(Session->SessionHandle, WINHTTP_OPTION_SEND_TIMEOUT,
+ &Session->TimeoutMs, sizeof(Session->TimeoutMs));
+ WinHttpSetOption(Session->SessionHandle, WINHTTP_OPTION_RECEIVE_TIMEOUT,
+ &Session->TimeoutMs, sizeof(Session->TimeoutMs));
+ }
+
// Prevent fallback to TLS 1.0/1.1
DWORD SecureProtocols =
WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2 | WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_3;
``````````
</details>
https://github.com/llvm/llvm-project/pull/188969
More information about the llvm-commits
mailing list