Skip to content

Commit

Permalink
Rollup merge of rust-lang#36762 - achanda:sockaddr_type, r=alexcrichton
Browse files Browse the repository at this point in the history
Add two functions to check type of SockAddr

These can be used to determine the type of the underlying IP
address

r? @alexcrichton
  • Loading branch information
Jonathan Turner authored Oct 11, 2016
2 parents 10d7e12 + d9e6430 commit 6f81f2f
Showing 1 changed file with 35 additions and 0 deletions.
35 changes: 35 additions & 0 deletions src/libstd/net/addr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,26 @@ impl SocketAddr {
SocketAddr::V6(ref mut a) => a.set_port(new_port),
}
}

/// Returns true if the IP in this `SocketAddr` is a valid IPv4 address,
/// false if it's a valid IPv6 address.
#[unstable(feature = "sockaddr_checker", issue = "36949")]
pub fn is_ipv4(&self) -> bool {
match *self {
SocketAddr::V4(_) => true,
SocketAddr::V6(_) => false,
}
}

/// Returns true if the IP in this `SocketAddr` is a valid IPv6 address,
/// false if it's a valid IPv4 address.
#[unstable(feature = "sockaddr_checker", issue = "36949")]
pub fn is_ipv6(&self) -> bool {
match *self {
SocketAddr::V4(_) => false,
SocketAddr::V6(_) => true,
}
}
}

impl SocketAddrV4 {
Expand Down Expand Up @@ -631,4 +651,19 @@ mod tests {
v6.set_scope_id(20);
assert_eq!(v6.scope_id(), 20);
}

#[test]
fn is_v4() {
let v4 = SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::new(77, 88, 21, 11), 80));
assert!(v4.is_ipv4());
assert!(!v4.is_ipv6());
}

#[test]
fn is_v6() {
let v6 = SocketAddr::V6(SocketAddrV6::new(
Ipv6Addr::new(0x2a02, 0x6b8, 0, 1, 0, 0, 0, 1), 80, 10, 0));
assert!(!v6.is_ipv4());
assert!(v6.is_ipv6());
}
}

0 comments on commit 6f81f2f

Please sign in to comment.