Skip to content

Commit b91bf39

Browse files
erenonBenedek Thaler
and
Benedek Thaler
authored
recvmsg: take slice for cmsg_buffer (#2524)
Instead of a Vec, to avoid forcing an allocation. `cmsg_space!` now creates a zero initialized vec (instead of a zero-len vec with capacity): this way callsites do not need to be changed. Fixes #2523 Co-authored-by: Benedek Thaler <benedek.thaler@wincent.co>
1 parent c7e35cd commit b91bf39

File tree

2 files changed

+4
-3
lines changed

2 files changed

+4
-3
lines changed

changelog/2524.changed.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
recvmsg: take slice for cmsg_buffer instead of Vec

src/sys/socket/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,7 @@ macro_rules! cmsg_space {
573573
( $( $x:ty ),* ) => {
574574
{
575575
let space = 0 $(+ $crate::sys::socket::cmsg_space::<$x>())*;
576-
Vec::<u8>::with_capacity(space)
576+
vec![0u8; space]
577577
}
578578
}
579579
}
@@ -2081,15 +2081,15 @@ fn pack_mhdr_to_send<'a, I, C, S>(
20812081
/// # References
20822082
/// [recvmsg(2)](https://pubs.opengroup.org/onlinepubs/9699919799/functions/recvmsg.html)
20832083
pub fn recvmsg<'a, 'outer, 'inner, S>(fd: RawFd, iov: &'outer mut [IoSliceMut<'inner>],
2084-
mut cmsg_buffer: Option<&'a mut Vec<u8>>,
2084+
mut cmsg_buffer: Option<&'a mut [u8]>,
20852085
flags: MsgFlags) -> Result<RecvMsg<'a, 'outer, S>>
20862086
where S: SockaddrLike + 'a,
20872087
'inner: 'outer
20882088
{
20892089
let mut address = mem::MaybeUninit::uninit();
20902090

20912091
let (msg_control, msg_controllen) = cmsg_buffer.as_mut()
2092-
.map(|v| (v.as_mut_ptr(), v.capacity()))
2092+
.map(|v| (v.as_mut_ptr(), v.len()))
20932093
.unwrap_or((ptr::null_mut(), 0));
20942094
let mut mhdr = unsafe {
20952095
pack_mhdr_to_receive(iov.as_mut().as_mut_ptr(), iov.len(), msg_control, msg_controllen, address.as_mut_ptr())

0 commit comments

Comments
 (0)