@@ -49,6 +49,15 @@ pub enum SocketAddr {
49
49
/// [IETF RFC 793]: https://tools.ietf.org/html/rfc793
50
50
/// [`IPv4` address]: Ipv4Addr
51
51
///
52
+ /// # Textual representation
53
+ ///
54
+ /// `SocketAddrV4` provides a [`FromStr`](crate::str::FromStr) implementation.
55
+ /// It accepts an IPv4 address in its [textual representation], followed by a
56
+ /// single `:`, followed by the port encoded as a decimal integer. Other
57
+ /// formats are not accepted.
58
+ ///
59
+ /// [textual representation]: Ipv4Addr#textual-representation
60
+ ///
52
61
/// # Examples
53
62
///
54
63
/// ```
@@ -82,6 +91,32 @@ pub struct SocketAddrV4 {
82
91
/// [IETF RFC 2553, Section 3.3]: https://tools.ietf.org/html/rfc2553#section-3.3
83
92
/// [`IPv6` address]: Ipv6Addr
84
93
///
94
+ /// # Textual representation
95
+ ///
96
+ /// `SocketAddrV6` provides a [`FromStr`](crate::str::FromStr) implementation,
97
+ /// based on the bracketed format recommended by [IETF RFC 5952],
98
+ /// with scope identifiers based on those specified in [IETF RFC 4007].
99
+ ///
100
+ /// It accepts addresses consisting of the following elements, in order:
101
+ /// - A left square bracket (`[`)
102
+ /// - The [textual representation] of an IPv6 address
103
+ /// - _Optionally_, a percent sign (`%`) followed by the scope identifier
104
+ /// encoded as a decimal integer
105
+ /// - A right square bracket (`]`)
106
+ /// - A colon (`:`)
107
+ /// - The port, encoded as a decimal integer.
108
+ ///
109
+ /// For example, the string `[2001:db8::413]:443` represents a `SocketAddrV6`
110
+ /// with the address `2001:db8::413` and port `443`. The string
111
+ /// `[2001:db8::413%612]:443` represents the same address and port, with a
112
+ /// scope identifier of `612`.
113
+ ///
114
+ /// Other formats are not accepted.
115
+ ///
116
+ /// [IETF RFC 5952]: https://tools.ietf.org/html/rfc5952#section-6
117
+ /// [IETF RFC 4007]: https://tools.ietf.org/html/rfc4007#section-11
118
+ /// [textual representation]: Ipv6Addr#textual-representation
119
+ ///
85
120
/// # Examples
86
121
///
87
122
/// ```
@@ -92,6 +127,10 @@ pub struct SocketAddrV4 {
92
127
/// assert_eq!("[2001:db8::1]:8080".parse(), Ok(socket));
93
128
/// assert_eq!(socket.ip(), &Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 1));
94
129
/// assert_eq!(socket.port(), 8080);
130
+ ///
131
+ /// let mut with_scope = socket.clone();
132
+ /// with_scope.set_scope_id(3);
133
+ /// assert_eq!("[2001:db8::1%3]:8080".parse(), Ok(with_scope));
95
134
/// ```
96
135
#[ derive( Copy , Clone , Eq , PartialEq , Ord , PartialOrd , Hash ) ]
97
136
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
0 commit comments