@@ -1621,7 +1621,8 @@ pub fn recvmmsg<'a, I, S>(
1621
1621
. unwrap_or( ( ptr:: null_mut( ) , 0 ) ) ;
1622
1622
let mhdr = unsafe {
1623
1623
pack_mhdr_to_receive(
1624
- d. iov. as_ref( ) ,
1624
+ d. iov. as_ref( ) . as_ptr( ) ,
1625
+ d. iov. as_ref( ) . len( ) ,
1625
1626
msg_control,
1626
1627
msg_controllen,
1627
1628
addresses[ i] . as_mut_ptr( ) ,
@@ -1695,24 +1696,24 @@ unsafe fn read_mhdr<'a, S>(
1695
1696
}
1696
1697
}
1697
1698
1698
- unsafe fn pack_mhdr_to_receive<' outer, ' inner, I , S >(
1699
- iov: I ,
1699
+ unsafe fn pack_mhdr_to_receive<S >(
1700
+ iov_buffer: * const IoSliceMut ,
1701
+ iov_buffer_len: usize ,
1700
1702
cmsg_buffer: * const u8 ,
1701
1703
cmsg_capacity: usize ,
1702
1704
address: * mut S ,
1703
1705
) -> msghdr
1704
1706
where
1705
- I : AsRef <[ IoSliceMut <' inner>] > + ' outer,
1706
- S : SockaddrLike + ' outer
1707
+ S : SockaddrLike
1707
1708
{
1708
1709
// Musl's msghdr has private fields, so this is the only way to
1709
1710
// initialize it.
1710
1711
let mut mhdr = mem:: MaybeUninit :: <msghdr>:: zeroed( ) ;
1711
1712
let p = mhdr. as_mut_ptr( ) ;
1712
1713
( * p) . msg_name = ( * address) . as_mut_ptr( ) as * mut c_void;
1713
1714
( * p) . msg_namelen = S :: size( ) ;
1714
- ( * p) . msg_iov = iov . as_ref ( ) . as_ptr ( ) as * mut iovec;
1715
- ( * p) . msg_iovlen = iov . as_ref ( ) . len ( ) as _;
1715
+ ( * p) . msg_iov = iov_buffer as * mut iovec;
1716
+ ( * p) . msg_iovlen = iov_buffer_len as _;
1716
1717
( * p) . msg_control = cmsg_buffer as * mut c_void;
1717
1718
( * p) . msg_controllen = cmsg_capacity as _;
1718
1719
( * p) . msg_flags = 0 ;
@@ -1797,7 +1798,7 @@ pub fn recvmsg<'a, 'outer, 'inner, S>(fd: RawFd, iov: &'outer mut [IoSliceMut<'i
1797
1798
. map( |v| ( v. as_mut_ptr( ) , v. capacity( ) ) )
1798
1799
. unwrap_or( ( ptr:: null_mut( ) , 0 ) ) ;
1799
1800
let mut mhdr = unsafe {
1800
- pack_mhdr_to_receive:: <_ , S > ( iov, msg_control, msg_controllen, address. as_mut_ptr( ) )
1801
+ pack_mhdr_to_receive( iov . as_ref ( ) . as_ptr ( ) , iov. len ( ) , msg_control, msg_controllen, address. as_mut_ptr( ) )
1801
1802
} ;
1802
1803
1803
1804
let ret = unsafe { libc:: recvmsg( fd, & mut mhdr, flags. bits( ) ) } ;
0 commit comments