diff --git a/quinn/src/platform/unix.rs b/quinn/src/platform/unix.rs index 117f9957b..95ec7716e 100644 --- a/quinn/src/platform/unix.rs +++ b/quinn/src/platform/unix.rs @@ -2,7 +2,7 @@ use std::{ io, io::IoSliceMut, mem::{self, MaybeUninit}, - net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6}, + net::{IpAddr, SocketAddr, SocketAddrV4, SocketAddrV6}, os::unix::io::AsRawFd, ptr, task::{Context, Poll}, @@ -375,8 +375,8 @@ fn prepare_msg( IpAddr::V4(v4) => { let pktinfo = libc::in_pktinfo { ipi_ifindex: 0, - ipi_spec_dst: unsafe { - *(v4 as *const Ipv4Addr as *const () as *const libc::in_addr) + ipi_spec_dst: libc::in_addr { + s_addr: u32::from_ne_bytes(v4.octets()), }, ipi_addr: libc::in_addr { s_addr: 0 }, }; @@ -385,8 +385,8 @@ fn prepare_msg( IpAddr::V6(v6) => { let pktinfo = libc::in6_pktinfo { ipi6_ifindex: 0, - ipi6_addr: unsafe { - *(v6 as *const Ipv6Addr as *const () as *const libc::in6_addr) + ipi6_addr: libc::in6_addr { + s6_addr: v6.octets(), }, }; encoder.push(libc::IPPROTO_IPV6, libc::IPV6_PKTINFO, pktinfo);