#[repr(transparent)]pub struct IpHint<T>(pub Vec<T>);
Expand description
6.4. "ipv4hint" and "ipv6hint"
The "ipv4hint" and "ipv6hint" keys convey IP addresses that clients
MAY use to reach the service. If A and AAAA records for TargetName
are locally available, the client SHOULD ignore these hints.
Otherwise, clients SHOULD perform A and/or AAAA queries for
TargetName as in Section 3, and clients SHOULD use the IP address in
those responses for future connections. Clients MAY opt to terminate
any connections using the addresses in hints and instead switch to
the addresses in response to the TargetName query. Failure to use A
and/or AAAA response addresses could negatively impact load balancing
or other geo-aware features and thereby degrade client performance.
The presentation "value" SHALL be a comma-separated list
(Appendix A.1) of one or more IP addresses of the appropriate family
in standard textual format [RFC5952]. To enable simpler parsing,
this SvcParamValue MUST NOT contain escape sequences.
The wire format for each parameter is a sequence of IP addresses in
network byte order. Like an A or AAAA RRSet, the list of addresses
represents an unordered collection, and clients SHOULD pick addresses
to use in a random order. An empty list of addresses is invalid.
When selecting between IPv4 and IPv6 addresses to use, clients may
use an approach such as Happy Eyeballs [HappyEyeballsV2]. When only
"ipv4hint" is present, IPv6-only clients may synthesize IPv6
addresses as specified in [RFC7050] or ignore the "ipv4hint" key and
wait for AAAA resolution (Section 3). Recursive resolvers MUST NOT
perform DNS64 ([RFC6147]) on parameters within a SVCB record. For
best performance, server operators SHOULD include an "ipv6hint"
parameter whenever they include an "ipv4hint" parameter.
These parameters are intended to minimize additional connection
latency when a recursive resolver is not compliant with the
requirements in Section 4, and SHOULD NOT be included if most clients
are using compliant recursive resolvers. When TargetName is the
origin hostname or the owner name (which can be written as "."),
server operators SHOULD NOT include these hints, because they are
unlikely to convey any performance benefit.
Tuple Fields§
§0: Vec<T>
Trait Implementations§
Source§impl<'r, T> BinDecodable<'r> for IpHint<T>where
T: BinDecodable<'r>,
impl<'r, T> BinDecodable<'r> for IpHint<T>where
T: BinDecodable<'r>,
Source§fn read(decoder: &mut BinDecoder<'r>) -> ProtoResult<Self>
fn read(decoder: &mut BinDecoder<'r>) -> ProtoResult<Self>
The wire format for each parameter is a sequence of IP addresses in network byte order. Like an A or AAAA RRSet, the list of addresses represents an unordered collection, and clients SHOULD pick addresses to use in a random order. An empty list of addresses is invalid.
Source§fn from_bytes(bytes: &'r [u8]) -> ProtoResult<Self>
fn from_bytes(bytes: &'r [u8]) -> ProtoResult<Self>
Source§impl<T> BinEncodable for IpHint<T>where
T: BinEncodable,
impl<T> BinEncodable for IpHint<T>where
T: BinEncodable,
Source§fn emit(&self, encoder: &mut BinEncoder<'_>) -> ProtoResult<()>
fn emit(&self, encoder: &mut BinEncoder<'_>) -> ProtoResult<()>
The wire format for each parameter is a sequence of IP addresses in network byte order. Like an A or AAAA RRSet, the list of addresses represents an unordered collection, and clients SHOULD pick addresses to use in a random order. An empty list of addresses is invalid.
Source§impl<T> Display for IpHint<T>where
T: Display,
impl<T> Display for IpHint<T>where
T: Display,
Source§fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>
The presentation “value” SHALL be a comma-separated list (Appendix A.1) of one or more IP addresses of the appropriate family in standard textual format RFC 5952. To enable simpler parsing, this SvcParamValue MUST NOT contain escape sequences.
impl<T: Eq> Eq for IpHint<T>
impl<T> StructuralPartialEq for IpHint<T>
Auto Trait Implementations§
impl<T> Freeze for IpHint<T>
impl<T> RefUnwindSafe for IpHint<T>where
T: RefUnwindSafe,
impl<T> Send for IpHint<T>where
T: Send,
impl<T> Sync for IpHint<T>where
T: Sync,
impl<T> Unpin for IpHint<T>where
T: Unpin,
impl<T> UnwindSafe for IpHint<T>where
T: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)