summaryrefslogtreecommitdiff
path: root/src/sys/socket/addr.rs
diff options
context:
space:
mode:
authorKyle Huey <khuey@kylehuey.com>2022-04-27 18:27:03 -0700
committerKyle Huey <khuey@kylehuey.com>2022-05-02 08:53:08 -0700
commit024c0d7ddefc5458911242d61a89f44b5a3b5a38 (patch)
tree0612d9c58f530664ad93be6a07aeeb748358ac6a /src/sys/socket/addr.rs
parent4d79e93904b5f679ea14c382e778404fab306dd0 (diff)
downloadnix-024c0d7ddefc5458911242d61a89f44b5a3b5a38.zip
Restore conversions from ip v4/6 Sockaddr types to std::net equivalents.
Fixes #1710
Diffstat (limited to 'src/sys/socket/addr.rs')
-rw-r--r--src/sys/socket/addr.rs22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/sys/socket/addr.rs b/src/sys/socket/addr.rs
index 52d60ac9..5cd4678c 100644
--- a/src/sys/socket/addr.rs
+++ b/src/sys/socket/addr.rs
@@ -1234,6 +1234,16 @@ impl From<net::SocketAddrV4> for SockaddrIn {
}
#[cfg(feature = "net")]
+impl From<SockaddrIn> for net::SocketAddrV4 {
+ fn from(addr: SockaddrIn) -> Self {
+ net::SocketAddrV4::new(
+ net::Ipv4Addr::from(addr.0.sin_addr.s_addr.to_ne_bytes()),
+ u16::from_be(addr.0.sin_port)
+ )
+ }
+}
+
+#[cfg(feature = "net")]
impl std::str::FromStr for SockaddrIn {
type Err = net::AddrParseError;
@@ -1330,6 +1340,18 @@ impl From<net::SocketAddrV6> for SockaddrIn6 {
}
#[cfg(feature = "net")]
+impl From<SockaddrIn6> for net::SocketAddrV6 {
+ fn from(addr: SockaddrIn6) -> Self {
+ net::SocketAddrV6::new(
+ net::Ipv6Addr::from(addr.0.sin6_addr.s6_addr),
+ u16::from_be(addr.0.sin6_port),
+ u32::from_be(addr.0.sin6_flowinfo),
+ u32::from_be(addr.0.sin6_scope_id)
+ )
+ }
+}
+
+#[cfg(feature = "net")]
impl std::str::FromStr for SockaddrIn6 {
type Err = net::AddrParseError;