Skip to content

Commit 8e22a76

Browse files
committed
Remome 'global timeout' to 'max timeout'
1 parent 8a7c536 commit 8e22a76

File tree

3 files changed

+52
-49
lines changed

3 files changed

+52
-49
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -654,6 +654,9 @@ res = cli.Options("/resource/foo");
654654
cli.set_connection_timeout(0, 300000); // 300 milliseconds
655655
cli.set_read_timeout(5, 0); // 5 seconds
656656
cli.set_write_timeout(5, 0); // 5 seconds
657+
658+
// This method works the same as curl's `--max-timeout` option
659+
svr.set_max_timeout(5000); // 5 seconds
657660
```
658661

659662
### Receive content with a content receiver

httplib.h

Lines changed: 45 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@
6666
#define CPPHTTPLIB_CLIENT_WRITE_TIMEOUT_USECOND 0
6767
#endif
6868

69-
#ifndef CPPHTTPLIB_CLIENT_GLOBAL_TIMEOUT_MSECOND
70-
#define CPPHTTPLIB_CLIENT_GLOBAL_TIMEOUT_MSECOND 0
69+
#ifndef CPPHTTPLIB_CLIENT_MAX_TIMEOUT_MSECOND
70+
#define CPPHTTPLIB_CLIENT_MAX_TIMEOUT_MSECOND 0
7171
#endif
7272

7373
#ifndef CPPHTTPLIB_IDLE_INTERVAL_SECOND
@@ -1431,9 +1431,9 @@ class ClientImpl {
14311431
template <class Rep, class Period>
14321432
void set_write_timeout(const std::chrono::duration<Rep, Period> &duration);
14331433

1434-
void set_global_timeout(time_t msec);
1434+
void set_max_timeout(time_t msec);
14351435
template <class Rep, class Period>
1436-
void set_global_timeout(const std::chrono::duration<Rep, Period> &duration);
1436+
void set_max_timeout(const std::chrono::duration<Rep, Period> &duration);
14371437

14381438
void set_basic_auth(const std::string &username, const std::string &password);
14391439
void set_bearer_token_auth(const std::string &token);
@@ -1543,7 +1543,7 @@ class ClientImpl {
15431543
time_t read_timeout_usec_ = CPPHTTPLIB_CLIENT_READ_TIMEOUT_USECOND;
15441544
time_t write_timeout_sec_ = CPPHTTPLIB_CLIENT_WRITE_TIMEOUT_SECOND;
15451545
time_t write_timeout_usec_ = CPPHTTPLIB_CLIENT_WRITE_TIMEOUT_USECOND;
1546-
time_t global_timeout_msec_ = CPPHTTPLIB_CLIENT_GLOBAL_TIMEOUT_MSECOND;
1546+
time_t max_timeout_msec_ = CPPHTTPLIB_CLIENT_MAX_TIMEOUT_MSECOND;
15471547

15481548
std::string basic_auth_username_;
15491549
std::string basic_auth_password_;
@@ -1868,9 +1868,9 @@ class Client {
18681868
template <class Rep, class Period>
18691869
void set_write_timeout(const std::chrono::duration<Rep, Period> &duration);
18701870

1871-
void set_global_timeout(time_t msec);
1871+
void set_max_timeout(time_t msec);
18721872
template <class Rep, class Period>
1873-
void set_global_timeout(const std::chrono::duration<Rep, Period> &duration);
1873+
void set_max_timeout(const std::chrono::duration<Rep, Period> &duration);
18741874

18751875
void set_basic_auth(const std::string &username, const std::string &password);
18761876
void set_bearer_token_auth(const std::string &token);
@@ -2261,11 +2261,11 @@ inline void ClientImpl::set_write_timeout(
22612261
}
22622262

22632263
template <class Rep, class Period>
2264-
inline void ClientImpl::set_global_timeout(
2264+
inline void ClientImpl::set_max_timeout(
22652265
const std::chrono::duration<Rep, Period> &duration) {
22662266
auto msec =
22672267
std::chrono::duration_cast<std::chrono::milliseconds>(duration).count();
2268-
set_global_timeout(msec);
2268+
set_max_timeout(msec);
22692269
}
22702270

22712271
template <class Rep, class Period>
@@ -2288,8 +2288,8 @@ Client::set_write_timeout(const std::chrono::duration<Rep, Period> &duration) {
22882288

22892289
template <class Rep, class Period>
22902290
inline void
2291-
Client::set_global_timeout(const std::chrono::duration<Rep, Period> &duration) {
2292-
cli_->set_global_timeout(duration);
2291+
Client::set_max_timeout(const std::chrono::duration<Rep, Period> &duration) {
2292+
cli_->set_max_timeout(duration);
22932293
}
22942294

22952295
/*
@@ -2369,7 +2369,7 @@ void split(const char *b, const char *e, char d, size_t m,
23692369
bool process_client_socket(
23702370
socket_t sock, time_t read_timeout_sec, time_t read_timeout_usec,
23712371
time_t write_timeout_sec, time_t write_timeout_usec,
2372-
time_t global_timeout_msec,
2372+
time_t max_timeout_msec,
23732373
std::chrono::time_point<std::chrono::steady_clock> start_time,
23742374
std::function<bool(Stream &)> callback);
23752375

@@ -3338,7 +3338,7 @@ class SocketStream final : public Stream {
33383338
public:
33393339
SocketStream(socket_t sock, time_t read_timeout_sec, time_t read_timeout_usec,
33403340
time_t write_timeout_sec, time_t write_timeout_usec,
3341-
time_t global_timeout_msec = 0,
3341+
time_t max_timeout_msec = 0,
33423342
std::chrono::time_point<std::chrono::steady_clock> start_time =
33433343
std::chrono::steady_clock::time_point::min());
33443344
~SocketStream() override;
@@ -3358,7 +3358,7 @@ class SocketStream final : public Stream {
33583358
time_t read_timeout_usec_;
33593359
time_t write_timeout_sec_;
33603360
time_t write_timeout_usec_;
3361-
time_t global_timeout_msec_;
3361+
time_t max_timeout_msec_;
33623362
const std::chrono::time_point<std::chrono::steady_clock> start_time;
33633363

33643364
std::vector<char> read_buff_;
@@ -3374,7 +3374,7 @@ class SSLSocketStream final : public Stream {
33743374
SSLSocketStream(
33753375
socket_t sock, SSL *ssl, time_t read_timeout_sec,
33763376
time_t read_timeout_usec, time_t write_timeout_sec,
3377-
time_t write_timeout_usec, time_t global_timeout_msec = 0,
3377+
time_t write_timeout_usec, time_t max_timeout_msec = 0,
33783378
std::chrono::time_point<std::chrono::steady_clock> start_time =
33793379
std::chrono::steady_clock::time_point::min());
33803380
~SSLSocketStream() override;
@@ -3395,7 +3395,7 @@ class SSLSocketStream final : public Stream {
33953395
time_t read_timeout_usec_;
33963396
time_t write_timeout_sec_;
33973397
time_t write_timeout_usec_;
3398-
time_t global_timeout_msec_;
3398+
time_t max_timeout_msec_;
33993399
const std::chrono::time_point<std::chrono::steady_clock> start_time;
34003400
};
34013401
#endif
@@ -3470,11 +3470,11 @@ process_server_socket(const std::atomic<socket_t> &svr_sock, socket_t sock,
34703470
inline bool process_client_socket(
34713471
socket_t sock, time_t read_timeout_sec, time_t read_timeout_usec,
34723472
time_t write_timeout_sec, time_t write_timeout_usec,
3473-
time_t global_timeout_msec,
3473+
time_t max_timeout_msec,
34743474
std::chrono::time_point<std::chrono::steady_clock> start_time,
34753475
std::function<bool(Stream &)> callback) {
34763476
SocketStream strm(sock, read_timeout_sec, read_timeout_usec,
3477-
write_timeout_sec, write_timeout_usec, global_timeout_msec,
3477+
write_timeout_sec, write_timeout_usec, max_timeout_msec,
34783478
start_time);
34793479
return callback(strm);
34803480
}
@@ -6010,14 +6010,14 @@ inline ssize_t Stream::write(const std::string &s) {
60106010

60116011
namespace detail {
60126012

6013-
inline void calc_actual_timeout(time_t global_timeout_msec,
6013+
inline void calc_actual_timeout(time_t max_timeout_msec,
60146014
time_t duration_msec, time_t timeout_sec,
60156015
time_t timeout_usec, time_t &actual_timeout_sec,
60166016
time_t &actual_timeout_usec) {
60176017
auto timeout_msec = (timeout_sec * 1000) + (timeout_usec / 1000);
60186018

60196019
auto actual_timeout_msec =
6020-
std::min(global_timeout_msec - duration_msec, timeout_msec);
6020+
std::min(max_timeout_msec - duration_msec, timeout_msec);
60216021

60226022
actual_timeout_sec = actual_timeout_msec / 1000;
60236023
actual_timeout_usec = (actual_timeout_msec % 1000) * 1000;
@@ -6027,25 +6027,25 @@ inline void calc_actual_timeout(time_t global_timeout_msec,
60276027
inline SocketStream::SocketStream(
60286028
socket_t sock, time_t read_timeout_sec, time_t read_timeout_usec,
60296029
time_t write_timeout_sec, time_t write_timeout_usec,
6030-
time_t global_timeout_msec,
6030+
time_t max_timeout_msec,
60316031
std::chrono::time_point<std::chrono::steady_clock> start_time)
60326032
: sock_(sock), read_timeout_sec_(read_timeout_sec),
60336033
read_timeout_usec_(read_timeout_usec),
60346034
write_timeout_sec_(write_timeout_sec),
60356035
write_timeout_usec_(write_timeout_usec),
6036-
global_timeout_msec_(global_timeout_msec), start_time(start_time),
6036+
max_timeout_msec_(max_timeout_msec), start_time(start_time),
60376037
read_buff_(read_buff_size_, 0) {}
60386038

60396039
inline SocketStream::~SocketStream() = default;
60406040

60416041
inline bool SocketStream::is_readable() const {
6042-
if (global_timeout_msec_ <= 0) {
6042+
if (max_timeout_msec_ <= 0) {
60436043
return select_read(sock_, read_timeout_sec_, read_timeout_usec_) > 0;
60446044
}
60456045

60466046
time_t read_timeout_sec;
60476047
time_t read_timeout_usec;
6048-
calc_actual_timeout(global_timeout_msec_, duration(), read_timeout_sec_,
6048+
calc_actual_timeout(max_timeout_msec_, duration(), read_timeout_sec_,
60496049
read_timeout_usec_, read_timeout_sec, read_timeout_usec);
60506050

60516051
return select_read(sock_, read_timeout_sec, read_timeout_usec) > 0;
@@ -7457,7 +7457,7 @@ inline void ClientImpl::copy_settings(const ClientImpl &rhs) {
74577457
read_timeout_usec_ = rhs.read_timeout_usec_;
74587458
write_timeout_sec_ = rhs.write_timeout_sec_;
74597459
write_timeout_usec_ = rhs.write_timeout_usec_;
7460-
global_timeout_msec_ = rhs.global_timeout_msec_;
7460+
max_timeout_msec_ = rhs.max_timeout_msec_;
74617461
basic_auth_username_ = rhs.basic_auth_username_;
74627462
basic_auth_password_ = rhs.basic_auth_password_;
74637463
bearer_token_auth_token_ = rhs.bearer_token_auth_token_;
@@ -8101,7 +8101,7 @@ inline Result ClientImpl::send_with_content_provider(
81018101
req.headers = headers;
81028102
req.path = path;
81038103
req.progress = progress;
8104-
if (global_timeout_msec_ > 0) {
8104+
if (max_timeout_msec_ > 0) {
81058105
req.start_time_ = std::chrono::steady_clock::now();
81068106
}
81078107

@@ -8261,7 +8261,7 @@ inline bool ClientImpl::process_socket(
82618261
std::function<bool(Stream &strm)> callback) {
82628262
return detail::process_client_socket(
82638263
socket.sock, read_timeout_sec_, read_timeout_usec_, write_timeout_sec_,
8264-
write_timeout_usec_, global_timeout_msec_, start_time,
8264+
write_timeout_usec_, max_timeout_msec_, start_time,
82658265
std::move(callback));
82668266
}
82678267

@@ -8286,7 +8286,7 @@ inline Result ClientImpl::Get(const std::string &path, const Headers &headers,
82868286
req.path = path;
82878287
req.headers = headers;
82888288
req.progress = std::move(progress);
8289-
if (global_timeout_msec_ > 0) {
8289+
if (max_timeout_msec_ > 0) {
82908290
req.start_time_ = std::chrono::steady_clock::now();
82918291
}
82928292

@@ -8354,7 +8354,7 @@ inline Result ClientImpl::Get(const std::string &path, const Headers &headers,
83548354
return content_receiver(data, data_length);
83558355
};
83568356
req.progress = std::move(progress);
8357-
if (global_timeout_msec_ > 0) {
8357+
if (max_timeout_msec_ > 0) {
83588358
req.start_time_ = std::chrono::steady_clock::now();
83598359
}
83608360

@@ -8402,7 +8402,7 @@ inline Result ClientImpl::Head(const std::string &path,
84028402
req.method = "HEAD";
84038403
req.headers = headers;
84048404
req.path = path;
8405-
if (global_timeout_msec_ > 0) {
8405+
if (max_timeout_msec_ > 0) {
84068406
req.start_time_ = std::chrono::steady_clock::now();
84078407
}
84088408

@@ -8822,7 +8822,7 @@ inline Result ClientImpl::Delete(const std::string &path,
88228822
req.headers = headers;
88238823
req.path = path;
88248824
req.progress = progress;
8825-
if (global_timeout_msec_ > 0) {
8825+
if (max_timeout_msec_ > 0) {
88268826
req.start_time_ = std::chrono::steady_clock::now();
88278827
}
88288828

@@ -8872,7 +8872,7 @@ inline Result ClientImpl::Options(const std::string &path,
88728872
req.method = "OPTIONS";
88738873
req.headers = headers;
88748874
req.path = path;
8875-
if (global_timeout_msec_ > 0) {
8875+
if (max_timeout_msec_ > 0) {
88768876
req.start_time_ = std::chrono::steady_clock::now();
88778877
}
88788878

@@ -8928,8 +8928,8 @@ inline void ClientImpl::set_write_timeout(time_t sec, time_t usec) {
89288928
write_timeout_usec_ = usec;
89298929
}
89308930

8931-
inline void ClientImpl::set_global_timeout(time_t msec) {
8932-
global_timeout_msec_ = msec;
8931+
inline void ClientImpl::set_max_timeout(time_t msec) {
8932+
max_timeout_msec_ = msec;
89338933
}
89348934

89358935
inline void ClientImpl::set_basic_auth(const std::string &username,
@@ -9173,11 +9173,11 @@ template <typename T>
91739173
inline bool process_client_socket_ssl(
91749174
SSL *ssl, socket_t sock, time_t read_timeout_sec, time_t read_timeout_usec,
91759175
time_t write_timeout_sec, time_t write_timeout_usec,
9176-
time_t global_timeout_msec,
9176+
time_t max_timeout_msec,
91779177
std::chrono::time_point<std::chrono::steady_clock> start_time, T callback) {
91789178
SSLSocketStream strm(sock, ssl, read_timeout_sec, read_timeout_usec,
91799179
write_timeout_sec, write_timeout_usec,
9180-
global_timeout_msec, start_time);
9180+
max_timeout_msec, start_time);
91819181
return callback(strm);
91829182
}
91839183

@@ -9193,26 +9193,26 @@ class SSLInit {
91939193
inline SSLSocketStream::SSLSocketStream(
91949194
socket_t sock, SSL *ssl, time_t read_timeout_sec, time_t read_timeout_usec,
91959195
time_t write_timeout_sec, time_t write_timeout_usec,
9196-
time_t global_timeout_msec,
9196+
time_t max_timeout_msec,
91979197
std::chrono::time_point<std::chrono::steady_clock> start_time)
91989198
: sock_(sock), ssl_(ssl), read_timeout_sec_(read_timeout_sec),
91999199
read_timeout_usec_(read_timeout_usec),
92009200
write_timeout_sec_(write_timeout_sec),
92019201
write_timeout_usec_(write_timeout_usec),
9202-
global_timeout_msec_(global_timeout_msec), start_time(start_time) {
9202+
max_timeout_msec_(max_timeout_msec), start_time(start_time) {
92039203
SSL_clear_mode(ssl, SSL_MODE_AUTO_RETRY);
92049204
}
92059205

92069206
inline SSLSocketStream::~SSLSocketStream() = default;
92079207

92089208
inline bool SSLSocketStream::is_readable() const {
9209-
if (global_timeout_msec_ <= 0) {
9209+
if (max_timeout_msec_ <= 0) {
92109210
return select_read(sock_, read_timeout_sec_, read_timeout_usec_) > 0;
92119211
}
92129212

92139213
time_t read_timeout_sec;
92149214
time_t read_timeout_usec;
9215-
calc_actual_timeout(global_timeout_msec_, duration(), read_timeout_sec_,
9215+
calc_actual_timeout(max_timeout_msec_, duration(), read_timeout_sec_,
92169216
read_timeout_usec_, read_timeout_sec, read_timeout_usec);
92179217

92189218
return select_read(sock_, read_timeout_sec, read_timeout_usec) > 0;
@@ -9553,12 +9553,12 @@ inline bool SSLClient::connect_with_proxy(
95539553
Response proxy_res;
95549554
if (!detail::process_client_socket(
95559555
socket.sock, read_timeout_sec_, read_timeout_usec_,
9556-
write_timeout_sec_, write_timeout_usec_, global_timeout_msec_,
9556+
write_timeout_sec_, write_timeout_usec_, max_timeout_msec_,
95579557
start_time, [&](Stream &strm) {
95589558
Request req2;
95599559
req2.method = "CONNECT";
95609560
req2.path = host_and_port_;
9561-
if (global_timeout_msec_ > 0) {
9561+
if (max_timeout_msec_ > 0) {
95629562
req2.start_time_ = std::chrono::steady_clock::now();
95639563
}
95649564
return process_request(strm, req2, proxy_res, false, error);
@@ -9580,7 +9580,7 @@ inline bool SSLClient::connect_with_proxy(
95809580
proxy_res = Response();
95819581
if (!detail::process_client_socket(
95829582
socket.sock, read_timeout_sec_, read_timeout_usec_,
9583-
write_timeout_sec_, write_timeout_usec_, global_timeout_msec_,
9583+
write_timeout_sec_, write_timeout_usec_, max_timeout_msec_,
95849584
start_time, [&](Stream &strm) {
95859585
Request req3;
95869586
req3.method = "CONNECT";
@@ -9589,7 +9589,7 @@ inline bool SSLClient::connect_with_proxy(
95899589
req3, auth, 1, detail::random_string(10),
95909590
proxy_digest_auth_username_, proxy_digest_auth_password_,
95919591
true));
9592-
if (global_timeout_msec_ > 0) {
9592+
if (max_timeout_msec_ > 0) {
95939593
req3.start_time_ = std::chrono::steady_clock::now();
95949594
}
95959595
return process_request(strm, req3, proxy_res, false, error);
@@ -9754,7 +9754,7 @@ inline bool SSLClient::process_socket(
97549754
assert(socket.ssl);
97559755
return detail::process_client_socket_ssl(
97569756
socket.ssl, socket.sock, read_timeout_sec_, read_timeout_usec_,
9757-
write_timeout_sec_, write_timeout_usec_, global_timeout_msec_, start_time,
9757+
write_timeout_sec_, write_timeout_usec_, max_timeout_msec_, start_time,
97589758
std::move(callback));
97599759
}
97609760

test/test.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8194,7 +8194,7 @@ TEST(Expect100ContinueTest, ServerClosesConnection) {
81948194
}
81958195
#endif
81968196

8197-
TEST(GlobalTimeoutTest, ContentStream) {
8197+
TEST(MaxTimeoutTest, ContentStream) {
81988198
Server svr;
81998199

82008200
svr.Get("/stream", [&](const Request &, Response &res) {
@@ -8270,7 +8270,7 @@ TEST(GlobalTimeoutTest, ContentStream) {
82708270
const time_t threshold = 200;
82718271

82728272
Client cli("localhost", PORT);
8273-
cli.set_global_timeout(std::chrono::milliseconds(timeout));
8273+
cli.set_max_timeout(std::chrono::milliseconds(timeout));
82748274

82758275

82768276
{
@@ -8320,7 +8320,7 @@ TEST(GlobalTimeoutTest, ContentStream) {
83208320
}
83218321

83228322
#ifdef CPPHTTPLIB_OPENSSL_SUPPORT
8323-
TEST(GlobalTimeoutTest, ContentStreamSSL) {
8323+
TEST(MaxTimeoutTest, ContentStreamSSL) {
83248324
SSLServer svr(SERVER_CERT_FILE, SERVER_PRIVATE_KEY_FILE);
83258325

83268326
svr.Get("/stream", [&](const Request &, Response &res) {
@@ -8397,7 +8397,7 @@ TEST(GlobalTimeoutTest, ContentStreamSSL) {
83978397

83988398
SSLClient cli("localhost", PORT);
83998399
cli.enable_server_certificate_verification(false);
8400-
cli.set_global_timeout(std::chrono::milliseconds(timeout));
8400+
cli.set_max_timeout(std::chrono::milliseconds(timeout));
84018401

84028402
{
84038403
auto start = std::chrono::steady_clock::now();

0 commit comments

Comments
 (0)