@@ -80,6 +80,7 @@ class CurlClient final : public Client,
8080 // thread need to be mutex protected.
8181 std::mutex mutex_;
8282 std::atomic<bool > shutting_down_;
83+ std::atomic<curl_socket_t > curl_socket_;
8384 // End mutex protected items.
8485 std::optional<Callbacks> callbacks_;
8586
@@ -164,20 +165,34 @@ class CurlClient final : public Client,
164165 return shutting_down_;
165166 }
166167
168+ void set_curl_socket (curl_socket_t curl_socket) {
169+ std::lock_guard lock (mutex_);
170+ curl_socket_ = curl_socket;
171+ }
172+
167173 void shutdown () {
168174 std::lock_guard lock (mutex_);
169175 shutting_down_ = true ;
176+ if (curl_socket_ != CURL_SOCKET_BAD ) {
177+ #ifdef _WIN32
178+ closesocket (curl_socket_);
179+ #else
180+ close (curl_socket_);
181+ #endif
182+ }
170183 }
171184
185+
172186 RequestContext (std::string url,
173187 http::request<http::string_body> req,
174188 std::optional<std::chrono::milliseconds> connect_timeout,
175189 std::optional<std::chrono::milliseconds> read_timeout,
176190 std::optional<std::chrono::milliseconds> write_timeout,
177191 std::optional<std::string> custom_ca_file,
178192 std::optional<std::string> proxy_url,
179- const bool skip_verify_peer
193+ bool skip_verify_peer
180194 ) : shutting_down_(false ),
195+ curl_socket_ (CURL_SOCKET_BAD ),
181196 last_download_amount(0 ),
182197 req(std::move(req)),
183198 url(std::move(url)),
0 commit comments