Skip to content

Commit 22fc21b

Browse files
committed
socket: stop setting vector length inside read_mhdr
CMSG_FIRSTHDR/CMSG_NEXTHDR operate in terms of pointers contained inside msghdr structure, vector capacity doesn't matter for them. This would change external behavior of recvmsg/recvmmsg in a sense that buffer passed to store controll messages won't have it's length updated but intended way to receive control messages is with cmsgs iterator on `RecvMsg` which would still work. This change is required to allow using a single vector to store control messages from multiple packets
1 parent 2c7bb2a commit 22fc21b

File tree

1 file changed

+5
-12
lines changed

1 file changed

+5
-12
lines changed

src/sys/socket/mod.rs

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1588,7 +1588,7 @@ pub fn recvmmsg<'a, I, S>(
15881588
}
15891589
);
15901590

1591-
(msg_controllen as usize, &mut d.cmsg_buffer)
1591+
msg_controllen as usize
15921592
}).collect();
15931593

15941594
let timeout = if let Some(mut t) = timeout {
@@ -1606,36 +1606,29 @@ pub fn recvmmsg<'a, I, S>(
16061606
.take(ret as usize)
16071607
.zip(addresses.iter().map(|addr| unsafe{addr.assume_init()}))
16081608
.zip(results.into_iter())
1609-
.map(|((mmsghdr, address), (msg_controllen, cmsg_buffer))| {
1609+
.map(|((mmsghdr, address), msg_controllen)| {
16101610
unsafe {
16111611
read_mhdr(
16121612
mmsghdr.msg_hdr,
16131613
mmsghdr.msg_len as isize,
16141614
msg_controllen,
16151615
address,
1616-
cmsg_buffer
16171616
)
16181617
}
16191618
})
16201619
.collect())
16211620
}
16221621

1623-
unsafe fn read_mhdr<'a, 'b, S>(
1622+
unsafe fn read_mhdr<'a, S>(
16241623
mhdr: msghdr,
16251624
r: isize,
16261625
msg_controllen: usize,
16271626
address: S,
1628-
cmsg_buffer: &'a mut Option<&'b mut Vec<u8>>
1629-
) -> RecvMsg<'b, S>
1627+
) -> RecvMsg<'a, S>
16301628
where S: SockaddrLike
16311629
{
16321630
let cmsghdr = {
16331631
if mhdr.msg_controllen > 0 {
1634-
// got control message(s)
1635-
cmsg_buffer
1636-
.as_mut()
1637-
.unwrap()
1638-
.set_len(mhdr.msg_controllen as usize);
16391632
debug_assert!(!mhdr.msg_control.is_null());
16401633
debug_assert!(msg_controllen >= mhdr.msg_controllen as usize);
16411634
CMSG_FIRSTHDR(&mhdr as *const msghdr)
@@ -1766,7 +1759,7 @@ pub fn recvmsg<'a, 'outer, 'inner, S>(fd: RawFd, iov: &'outer mut [IoSliceMut<'i
17661759

17671760
let r = Errno::result(ret)?;
17681761

1769-
Ok(unsafe { read_mhdr(mhdr, r, msg_controllen, address.assume_init(), &mut cmsg_buffer) })
1762+
Ok(unsafe { read_mhdr(mhdr, r, msg_controllen, address.assume_init()) })
17701763
}
17711764
}
17721765

0 commit comments

Comments
 (0)