Explicit-time QUIC packet-number spaces and loss recovery state.
Packet numbers are allocated by reserve/4 and are never reused. A packet
moves through :reserved, :queued, :sent, then :acked, :lost, or
:failed. ACKs received before a local send receipt are retained as a bounded
pending acknowledgement and resolved when the receipt arrives.
Summary
Functions
Recompute the next deadline from actual sent packets, without advancing time.
Discard an encryption space's outstanding work while preserving allocated packet numbers.
Record an authenticated packet number received in a packet-number space.
Current probe timeout duration in microseconds, before PTO backoff.
Permanently retire Initial/Handshake recovery, preserving the next packet number.
Types
@type initial_state() :: %Quic.Recovery{ congestion: %Quic.Congestion.NewReno{ acked_bytes: 0, bytes_in_flight: 0, cwnd: term(), max_datagram_size: term(), mss: number(), ssthresh: term() }, deadline: nil, max_ack_ranges: term(), max_sent_packets: term(), rtt: %Quic.Recovery.RTT{ ack_delay_exponent: term(), latest: nil, max_ack_delay: term(), min: nil, pto_count: 0, smoothed: nil, variance: nil }, spaces: map(), timer_generation: 0 }
Functions
Recompute the next deadline from actual sent packets, without advancing time.
Discard an encryption space's outstanding work while preserving allocated packet numbers.
@spec new(keyword()) :: initial_state()
@spec note_received(t(), atom(), non_neg_integer()) :: {:ok, t()} | {:error, atom()}
Record an authenticated packet number received in a packet-number space.
@spec pto_duration(t()) :: pos_integer()
Current probe timeout duration in microseconds, before PTO backoff.
Permanently retire Initial/Handshake recovery, preserving the next packet number.
@spec timer_expired?(t(), non_neg_integer(), integer()) :: boolean()