98 const std::chrono::milliseconds m_timeout;
99 const std::size_t m_max_attempts;
108 counted_timeout (std::chrono::milliseconds timeout, std::size_t max_conn_attempts) :
109 m_timeout(timeout), m_max_attempts(max_conn_attempts) {}
118 optional_millis operator()(std::size_t attempts)
const noexcept {
119 return (attempts > m_max_attempts) ? optional_millis { } : optional_millis { m_timeout };
132 using tick_type =
typename std::chrono::milliseconds::rep;
133 const tick_type m_initial_ticks;
134 const tick_type m_max_ticks;
135 const int m_scale_factor;
146 backoff_timeout(std::chrono::milliseconds initial_timeout, std::chrono::milliseconds max_timeout,
147 int scale_factor = 2) :
148 m_initial_ticks(initial_timeout.count()), m_max_ticks(max_timeout.count()),
149 m_scale_factor(scale_factor) { }
158 optional_millis operator()(std::size_t attempts)
const noexcept {
159 auto tmp =
static_cast<tick_type
>((attempts-1u) * m_scale_factor * m_initial_ticks);
160 tmp = (tmp == 0u ? m_initial_ticks : ((tmp > m_max_ticks) ? m_max_ticks : tmp));
161 return optional_millis { std::chrono::milliseconds { tmp } };
174 using tick_type =
typename std::chrono::milliseconds::rep;
175 const tick_type m_initial_ticks;
176 const tick_type m_max_ticks;
187 std::chrono::milliseconds max_timeout) :
188 m_initial_ticks(initial_timeout.count()), m_max_ticks(max_timeout.count()) { }
197 optional_millis operator()(std::size_t attempts)
const noexcept {
199 auto tmp =
static_cast<tick_type
>(std::pow(m_initial_ticks, attempts));
200 std::chrono::milliseconds tout { (tmp > m_max_ticks) ? m_max_ticks : tmp };
201 return optional_millis { tout };