Skip to content

Commit b1da88c

Browse files
committed
pack_mhdr_to_receive: pass iovec ptr and capacity separately
We'll be using that to reinitialize buffers later
1 parent a8aeb46 commit b1da88c

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

src/sys/socket/mod.rs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1578,7 +1578,8 @@ pub fn recvmmsg<'a, I, S>(
15781578
.unwrap_or((ptr::null_mut(), 0));
15791579
let mhdr = unsafe {
15801580
pack_mhdr_to_receive(
1581-
d.iov.as_ref(),
1581+
d.iov.as_ref().as_ptr(),
1582+
d.iov.as_ref().len(),
15821583
msg_control,
15831584
msg_controllen,
15841585
addresses[i].as_mut_ptr(),
@@ -1650,24 +1651,24 @@ unsafe fn read_mhdr<'a, S>(
16501651
}
16511652
}
16521653

1653-
unsafe fn pack_mhdr_to_receive<'outer, 'inner, I, S>(
1654-
iov: I,
1654+
unsafe fn pack_mhdr_to_receive<S>(
1655+
iov_buffer: *const IoSliceMut,
1656+
iov_buffer_len: usize,
16551657
cmsg_buffer: *const u8,
16561658
cmsg_capacity: usize,
16571659
address: *mut S,
16581660
) -> msghdr
16591661
where
1660-
I: AsRef<[IoSliceMut<'inner>]> + 'outer,
1661-
S: SockaddrLike + 'outer
1662+
S: SockaddrLike
16621663
{
16631664
// Musl's msghdr has private fields, so this is the only way to
16641665
// initialize it.
16651666
let mut mhdr = mem::MaybeUninit::<msghdr>::zeroed();
16661667
let p = mhdr.as_mut_ptr();
16671668
(*p).msg_name = (*address).as_mut_ptr() as *mut c_void;
16681669
(*p).msg_namelen = S::size();
1669-
(*p).msg_iov = iov.as_ref().as_ptr() as *mut iovec;
1670-
(*p).msg_iovlen = iov.as_ref().len() as _;
1670+
(*p).msg_iov = iov_buffer as *mut iovec;
1671+
(*p).msg_iovlen = iov_buffer_len as _;
16711672
(*p).msg_control = cmsg_buffer as *mut c_void;
16721673
(*p).msg_controllen = cmsg_capacity as _;
16731674
(*p).msg_flags = 0;
@@ -1752,7 +1753,7 @@ pub fn recvmsg<'a, 'outer, 'inner, S>(fd: RawFd, iov: &'outer mut [IoSliceMut<'i
17521753
.map(|v| (v.as_mut_ptr(), v.capacity()))
17531754
.unwrap_or((ptr::null_mut(), 0));
17541755
let mut mhdr = unsafe {
1755-
pack_mhdr_to_receive::<_, S>(iov, msg_control, msg_controllen, address.as_mut_ptr())
1756+
pack_mhdr_to_receive(iov.as_ref().as_ptr(), iov.len(), msg_control, msg_controllen, address.as_mut_ptr())
17561757
};
17571758

17581759
let ret = unsafe { libc::recvmsg(fd, &mut mhdr, flags.bits()) };

0 commit comments

Comments
 (0)