From 276a063531c102c4907033517f7c73d95728c3ca Mon Sep 17 00:00:00 2001 From: Sinh Pham Date: Thu, 24 Jul 2025 14:16:03 -0700 Subject: [PATCH 1/3] Update socket2 to 0.6 --- Cargo.toml | 2 +- src/unix.rs | 26 +++++++------------------- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 8b43e51..89c3838 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,7 @@ categories = ["network-programming"] description = "Small library to allow cross-platform handling of IP_PKTINFO and IPV6_PKTINFO with socket2 crate" [dependencies.socket2] -version = "0.5.8" +version = "0.6.0" features = ["all"] [target.'cfg(windows)'.dependencies.windows-sys] diff --git a/src/unix.rs b/src/unix.rs index 709bb80..3735c84 100644 --- a/src/unix.rs +++ b/src/unix.rs @@ -5,7 +5,7 @@ use std::net::{IpAddr, Ipv4Addr, Ipv6Addr}; use std::os::unix::io::{AsRawFd, RawFd}; use std::{io, mem, ptr}; -use socket2::{Domain, Protocol, SockAddr, Socket, Type}; +use socket2::{Domain, Protocol, SockAddr, SockAddrStorage, Socket, Type}; use crate::PktInfo; @@ -133,17 +133,11 @@ impl PktInfoUdpSocket { } pub fn recv(&self, buf: &mut [u8]) -> io::Result<(usize, PktInfo)> { - let mut addr_src: MaybeUninit = MaybeUninit::uninit(); + let mut addr_src = SockAddrStorage::zeroed(); let mut msg_iov = IoSliceMut::new(buf); let mut cmsg = { - let space = if self.domain == Domain::IPV4 { - unsafe { - libc::CMSG_SPACE(mem::size_of::() as libc::c_uint) as usize - } - } else { - unsafe { - libc::CMSG_SPACE(mem::size_of::() as libc::c_uint) as usize - } + let space = unsafe { + libc::CMSG_SPACE(mem::size_of::() as libc::c_uint) as usize }; Vec::::with_capacity(space) }; @@ -151,7 +145,7 @@ impl PktInfoUdpSocket { let mut mhdr = unsafe { let mut mhdr = MaybeUninit::::zeroed(); let p = mhdr.as_mut_ptr(); - (*p).msg_name = addr_src.as_mut_ptr() as *mut libc::c_void; + (*p).msg_name = addr_src.view_as::(); (*p).msg_namelen = mem::size_of::() as libc::socklen_t; (*p).msg_iov = &mut msg_iov as *mut IoSliceMut as *mut libc::iovec; (*p).msg_iovlen = 1; @@ -167,14 +161,8 @@ impl PktInfoUdpSocket { return Err(Error::last_os_error()); } - let addr_src = unsafe { - SockAddr::new( - addr_src.assume_init(), - mem::size_of::() as _, - ) - } - .as_socket() - .unwrap(); + let len = addr_src.size_of(); + let addr_src = unsafe { SockAddr::new(addr_src, len) }.as_socket().unwrap(); let mut header = if mhdr.msg_controllen > 0 { debug_assert!(!mhdr.msg_control.is_null()); From e6d6d6c0d23d9c0753a12c6e24c47705ada170df Mon Sep 17 00:00:00 2001 From: Sinh Pham Date: Thu, 24 Jul 2025 14:26:38 -0700 Subject: [PATCH 2/3] revert bad merge --- src/unix.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/unix.rs b/src/unix.rs index 3735c84..f7a9db9 100644 --- a/src/unix.rs +++ b/src/unix.rs @@ -136,8 +136,14 @@ impl PktInfoUdpSocket { let mut addr_src = SockAddrStorage::zeroed(); let mut msg_iov = IoSliceMut::new(buf); let mut cmsg = { - let space = unsafe { - libc::CMSG_SPACE(mem::size_of::() as libc::c_uint) as usize + let space = if self.domain == Domain::IPV4 { + unsafe { + libc::CMSG_SPACE(mem::size_of::() as libc::c_uint) as usize + } + } else { + unsafe { + libc::CMSG_SPACE(mem::size_of::() as libc::c_uint) as usize + } }; Vec::::with_capacity(space) }; From d0638d57ff84162bbcd52808710f1a3d342057d2 Mon Sep 17 00:00:00 2001 From: Sinh Pham Date: Fri, 25 Jul 2025 08:43:45 -0700 Subject: [PATCH 3/3] Windows --- src/win.rs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/win.rs b/src/win.rs index 70e4006..dfee078 100644 --- a/src/win.rs +++ b/src/win.rs @@ -4,7 +4,7 @@ use std::net::{IpAddr, Ipv4Addr, Ipv6Addr}; use std::os::windows::io::{AsRawSocket, RawSocket}; use std::{io, mem, ptr}; -use socket2::{Domain, Protocol, SockAddr, Socket, Type}; +use socket2::{Domain, Protocol, SockAddr, SockAddrStorage, Socket, Type}; use windows_sys::core::{PCSTR, PSTR}; use windows_sys::Win32::Networking::WinSock::{ self, CMSGHDR, IN6_PKTINFO, IN_PKTINFO, IPPROTO_IP, IPPROTO_IPV6, IPV6_PKTINFO, IP_PKTINFO, @@ -196,10 +196,10 @@ impl PktInfoUdpSocket { }, }; - let mut addr = unsafe { mem::zeroed() }; + let mut addr = SockAddrStorage::zeroed(); let mut wsa_msg = WSAMSG { name: &mut addr as *mut _ as *mut _, - namelen: mem::size_of_val(&addr) as i32, + namelen: addr.size_of(), lpBuffers: &mut data, Control: control, dwBufferCount: 1, @@ -223,9 +223,8 @@ impl PktInfoUdpSocket { return Err(io::Error::last_os_error()); } - let addr_src = unsafe { SockAddr::new(addr, mem::size_of_val(&addr) as i32) } - .as_socket() - .unwrap(); + let len = addr.size_of(); + let addr_src = unsafe { SockAddr::new(addr, len) }.as_socket().unwrap(); let mut info: Option = None;