@@ -1578,7 +1578,8 @@ pub fn recvmmsg<'a, I, S>(
1578
1578
. unwrap_or( ( ptr:: null_mut( ) , 0 ) ) ;
1579
1579
let mhdr = unsafe {
1580
1580
pack_mhdr_to_receive(
1581
- d. iov. as_ref( ) ,
1581
+ d. iov. as_ref( ) . as_ptr( ) ,
1582
+ d. iov. as_ref( ) . len( ) ,
1582
1583
msg_control,
1583
1584
msg_controllen,
1584
1585
addresses[ i] . as_mut_ptr( ) ,
@@ -1650,24 +1651,24 @@ unsafe fn read_mhdr<'a, S>(
1650
1651
}
1651
1652
}
1652
1653
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 ,
1655
1657
cmsg_buffer: * const u8 ,
1656
1658
cmsg_capacity: usize ,
1657
1659
address: * mut S ,
1658
1660
) -> msghdr
1659
1661
where
1660
- I : AsRef <[ IoSliceMut <' inner>] > + ' outer,
1661
- S : SockaddrLike + ' outer
1662
+ S : SockaddrLike
1662
1663
{
1663
1664
// Musl's msghdr has private fields, so this is the only way to
1664
1665
// initialize it.
1665
1666
let mut mhdr = mem:: MaybeUninit :: <msghdr>:: zeroed( ) ;
1666
1667
let p = mhdr. as_mut_ptr( ) ;
1667
1668
( * p) . msg_name = ( * address) . as_mut_ptr( ) as * mut c_void;
1668
1669
( * 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 _;
1671
1672
( * p) . msg_control = cmsg_buffer as * mut c_void;
1672
1673
( * p) . msg_controllen = cmsg_capacity as _;
1673
1674
( * p) . msg_flags = 0 ;
@@ -1752,7 +1753,7 @@ pub fn recvmsg<'a, 'outer, 'inner, S>(fd: RawFd, iov: &'outer mut [IoSliceMut<'i
1752
1753
. map( |v| ( v. as_mut_ptr( ) , v. capacity( ) ) )
1753
1754
. unwrap_or( ( ptr:: null_mut( ) , 0 ) ) ;
1754
1755
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( ) )
1756
1757
} ;
1757
1758
1758
1759
let ret = unsafe { libc:: recvmsg( fd, & mut mhdr, flags. bits( ) ) } ;
0 commit comments