@@ -1621,7 +1621,8 @@ pub fn recvmmsg<'a, I, S>(
16211621 . unwrap_or( ( ptr:: null_mut( ) , 0 ) ) ;
16221622 let mhdr = unsafe {
16231623 pack_mhdr_to_receive(
1624- d. iov. as_ref( ) ,
1624+ d. iov. as_ref( ) . as_ptr( ) ,
1625+ d. iov. as_ref( ) . len( ) ,
16251626 msg_control,
16261627 msg_controllen,
16271628 addresses[ i] . as_mut_ptr( ) ,
@@ -1695,24 +1696,24 @@ unsafe fn read_mhdr<'a, S>(
16951696 }
16961697}
16971698
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 ,
17001702 cmsg_buffer: * const u8 ,
17011703 cmsg_capacity: usize ,
17021704 address: * mut S ,
17031705) -> msghdr
17041706 where
1705- I : AsRef <[ IoSliceMut <' inner>] > + ' outer,
1706- S : SockaddrLike + ' outer
1707+ S : SockaddrLike
17071708{
17081709 // Musl's msghdr has private fields, so this is the only way to
17091710 // initialize it.
17101711 let mut mhdr = mem:: MaybeUninit :: <msghdr>:: zeroed( ) ;
17111712 let p = mhdr. as_mut_ptr( ) ;
17121713 ( * p) . msg_name = ( * address) . as_mut_ptr( ) as * mut c_void;
17131714 ( * 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 _;
17161717 ( * p) . msg_control = cmsg_buffer as * mut c_void;
17171718 ( * p) . msg_controllen = cmsg_capacity as _;
17181719 ( * p) . msg_flags = 0 ;
@@ -1797,7 +1798,7 @@ pub fn recvmsg<'a, 'outer, 'inner, S>(fd: RawFd, iov: &'outer mut [IoSliceMut<'i
17971798 . map( |v| ( v. as_mut_ptr( ) , v. capacity( ) ) )
17981799 . unwrap_or( ( ptr:: null_mut( ) , 0 ) ) ;
17991800 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( ) )
18011802 } ;
18021803
18031804 let ret = unsafe { libc:: recvmsg( fd, & mut mhdr, flags. bits( ) ) } ;
0 commit comments