@@ -668,9 +668,18 @@ class Server {
668668
669669 Server &set_keep_alive_max_count (size_t count);
670670 Server &set_keep_alive_timeout (time_t sec);
671+
671672 Server &set_read_timeout (time_t sec, time_t usec = 0 );
673+ template <class Rep , class Period >
674+ Server &set_read_timeout (const std::chrono::duration<Rep, Period> &duration);
675+
672676 Server &set_write_timeout (time_t sec, time_t usec = 0 );
677+ template <class Rep , class Period >
678+ Server &set_write_timeout (const std::chrono::duration<Rep, Period> &duration);
679+
673680 Server &set_idle_interval (time_t sec, time_t usec = 0 );
681+ template <class Rep , class Period >
682+ Server &set_idle_interval (const std::chrono::duration<Rep, Period> &duration);
674683
675684 Server &set_payload_max_length (size_t length);
676685
@@ -966,8 +975,16 @@ class ClientImpl {
966975 void set_socket_options (SocketOptions socket_options);
967976
968977 void set_connection_timeout (time_t sec, time_t usec = 0 );
978+ template <class Rep , class Period >
979+ void set_connection_timeout (const std::chrono::duration<Rep, Period> &duration);
980+
969981 void set_read_timeout (time_t sec, time_t usec = 0 );
982+ template <class Rep , class Period >
983+ void set_read_timeout (const std::chrono::duration<Rep, Period> &duration);
984+
970985 void set_write_timeout (time_t sec, time_t usec = 0 );
986+ template <class Rep , class Period >
987+ void set_write_timeout (const std::chrono::duration<Rep, Period> &duration);
971988
972989 void set_basic_auth (const char *username, const char *password);
973990 void set_bearer_token_auth (const char *token);
@@ -1268,8 +1285,16 @@ class Client {
12681285 void set_socket_options (SocketOptions socket_options);
12691286
12701287 void set_connection_timeout (time_t sec, time_t usec = 0 );
1288+ template <class Rep , class Period >
1289+ void set_connection_timeout (const std::chrono::duration<Rep, Period> &duration);
1290+
12711291 void set_read_timeout (time_t sec, time_t usec = 0 );
1292+ template <class Rep , class Period >
1293+ void set_read_timeout (const std::chrono::duration<Rep, Period> &duration);
1294+
12721295 void set_write_timeout (time_t sec, time_t usec = 0 );
1296+ template <class Rep , class Period >
1297+ void set_write_timeout (const std::chrono::duration<Rep, Period> &duration);
12731298
12741299 void set_basic_auth (const char *username, const char *password);
12751300 void set_bearer_token_auth (const char *token);
@@ -3804,6 +3829,15 @@ class ContentProviderAdapter {
38043829 ContentProviderWithoutLength content_provider_;
38053830};
38063831
3832+ template <typename T, typename U>
3833+ inline void duration_to_sec_and_usec (const T &duration, U callback) {
3834+ auto sec = std::chrono::duration_cast<std::chrono::seconds>(duration).count ();
3835+ auto usec = std::chrono::duration_cast<std::chrono::microseconds>(
3836+ duration - std::chrono::seconds (sec))
3837+ .count ();
3838+ callback (sec, usec);
3839+ }
3840+
38073841} // namespace detail
38083842
38093843// Header utilities
@@ -4381,20 +4415,47 @@ inline Server &Server::set_read_timeout(time_t sec, time_t usec) {
43814415 return *this ;
43824416}
43834417
4418+ template <class Rep , class Period >
4419+ inline Server &Server::set_read_timeout (
4420+ const std::chrono::duration<Rep, Period> &duration) {
4421+ detail::duration_to_sec_and_usec (duration, [&](time_t sec, time_t usec) {
4422+ set_read_timeout (sec, usec);
4423+ });
4424+ return *this ;
4425+ }
4426+
43844427inline Server &Server::set_write_timeout (time_t sec, time_t usec) {
43854428 write_timeout_sec_ = sec;
43864429 write_timeout_usec_ = usec;
43874430
43884431 return *this ;
43894432}
43904433
4434+ template <class Rep , class Period >
4435+ inline Server &Server::set_write_timeout (
4436+ const std::chrono::duration<Rep, Period> &duration) {
4437+ detail::duration_to_sec_and_usec (duration, [&](time_t sec, time_t usec) {
4438+ set_write_timeout (sec, usec);
4439+ });
4440+ return *this ;
4441+ }
4442+
43914443inline Server &Server::set_idle_interval (time_t sec, time_t usec) {
43924444 idle_interval_sec_ = sec;
43934445 idle_interval_usec_ = usec;
43944446
43954447 return *this ;
43964448}
43974449
4450+ template <class Rep , class Period >
4451+ inline Server &Server::set_idle_interval (
4452+ const std::chrono::duration<Rep, Period> &duration) {
4453+ detail::duration_to_sec_and_usec (duration, [&](time_t sec, time_t usec) {
4454+ set_idle_interval (sec, usec);
4455+ });
4456+ return *this ;
4457+ }
4458+
43984459inline Server &Server::set_payload_max_length (size_t length) {
43994460 payload_max_length_ = length;
44004461
@@ -6273,16 +6334,40 @@ inline void ClientImpl::set_connection_timeout(time_t sec, time_t usec) {
62736334 connection_timeout_usec_ = usec;
62746335}
62756336
6337+ template <class Rep , class Period >
6338+ inline void ClientImpl::set_connection_timeout (
6339+ const std::chrono::duration<Rep, Period> &duration) {
6340+ detail::duration_to_sec_and_usec (duration, [&](time_t sec, time_t usec) {
6341+ set_connection_timeout (sec, usec);
6342+ });
6343+ }
6344+
62766345inline void ClientImpl::set_read_timeout (time_t sec, time_t usec) {
62776346 read_timeout_sec_ = sec;
62786347 read_timeout_usec_ = usec;
62796348}
62806349
6350+ template <class Rep , class Period >
6351+ inline void ClientImpl::set_read_timeout (
6352+ const std::chrono::duration<Rep, Period> &duration) {
6353+ detail::duration_to_sec_and_usec (duration, [&](time_t sec, time_t usec) {
6354+ set_read_timeout (sec, usec);
6355+ });
6356+ }
6357+
62816358inline void ClientImpl::set_write_timeout (time_t sec, time_t usec) {
62826359 write_timeout_sec_ = sec;
62836360 write_timeout_usec_ = usec;
62846361}
62856362
6363+ template <class Rep , class Period >
6364+ inline void ClientImpl::set_write_timeout (
6365+ const std::chrono::duration<Rep, Period> &duration) {
6366+ detail::duration_to_sec_and_usec (duration, [&](time_t sec, time_t usec) {
6367+ set_write_timeout (sec, usec);
6368+ });
6369+ }
6370+
62866371inline void ClientImpl::set_basic_auth (const char *username,
62876372 const char *password) {
62886373 basic_auth_username_ = username;
@@ -7372,20 +7457,41 @@ inline void Client::set_default_headers(Headers headers) {
73727457}
73737458
73747459inline void Client::set_tcp_nodelay (bool on) { cli_->set_tcp_nodelay (on); }
7460+
73757461inline void Client::set_socket_options (SocketOptions socket_options) {
73767462 cli_->set_socket_options (std::move (socket_options));
73777463}
73787464
73797465inline void Client::set_connection_timeout (time_t sec, time_t usec) {
73807466 cli_->set_connection_timeout (sec, usec);
73817467}
7468+
7469+ template <class Rep , class Period >
7470+ inline void Client::set_connection_timeout (
7471+ const std::chrono::duration<Rep, Period> &duration) {
7472+ cli_->set_connection_timeout (duration);
7473+ }
7474+
73827475inline void Client::set_read_timeout (time_t sec, time_t usec) {
73837476 cli_->set_read_timeout (sec, usec);
73847477}
7478+
7479+ template <class Rep , class Period >
7480+ inline void Client::set_read_timeout (
7481+ const std::chrono::duration<Rep, Period> &duration) {
7482+ cli_->set_read_timeout (duration);
7483+ }
7484+
73857485inline void Client::set_write_timeout (time_t sec, time_t usec) {
73867486 cli_->set_write_timeout (sec, usec);
73877487}
73887488
7489+ template <class Rep , class Period >
7490+ inline void Client::set_write_timeout (
7491+ const std::chrono::duration<Rep, Period> &duration) {
7492+ cli_->set_write_timeout (duration);
7493+ }
7494+
73897495inline void Client::set_basic_auth (const char *username, const char *password) {
73907496 cli_->set_basic_auth (username, password);
73917497}
0 commit comments