pub struct ConnectTiming {
pub dns: Duration,
pub tcp: Duration,
pub tls: Option<Duration>,
pub total: Duration,
}Expand description
What each phase of a connect cost.
The three phases are three measurements, not a decomposition.
dns + tcp + tls <= total always holds — they are disjoint intervals
inside the whole — but the remainder is real time belonging to none of
them: RFC 8305 staggers connection attempts, so a winner that started
250 ms into the race spent that stagger in no phase at all, and a
first attempt made through an HTTPS record’s hints and failed is time
the second attempt’s phases do not contain either.
Every duration is measured on the transport’s own Timer — the same
clock its timeouts and its pool deadlines use, so a test under
tokio::time::pause() sees one consistent story rather than two.
Fields§
§dns: DurationFrom the start of the connect to the moment the first address could be tried.
A DNS figure in the honest sense — everything waited for is a DNS answer — but not only an A/AAAA one: an HTTPS record (RFC 9460) is looked up beside the addresses and its hints are tried first, so a slow record delays the first attempt and shows up here.
tcp: DurationThe winning TCP attempt, from the moment it was launched to the moment it connected. Not the race: an attempt the scheduler started earlier and that lost is not in this number.
tls: Option<Duration>The TLS handshake, or None for a connection that has none —
which is the honest answer for http://, where a zero would read
as an instant handshake.
total: DurationThe whole connect, from the transport asking for a connection to having one: DNS, every attempt including those that failed, and TLS.
Trait Implementations§
Source§impl Clone for ConnectTiming
impl Clone for ConnectTiming
Source§fn clone(&self) -> ConnectTiming
fn clone(&self) -> ConnectTiming
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more