@@ -17,6 +17,7 @@ use libc::{
17
17
} ;
18
18
#[ cfg( not( target_os = "redox" ) ) ]
19
19
use std:: io:: { IoSlice , IoSliceMut } ;
20
+ use std:: marker:: PhantomData ;
20
21
#[ cfg( feature = "net" ) ]
21
22
use std:: net;
22
23
use std:: os:: unix:: io:: { AsFd , AsRawFd , FromRawFd , OwnedFd , RawFd } ;
@@ -1765,7 +1766,7 @@ pub fn sendmmsg<'a, XS, AS, C, I, S>(
1765
1766
// shared across all the messages
1766
1767
cmsgs: C ,
1767
1768
flags: MsgFlags
1768
- ) -> crate :: Result <MultiResults <' a, S >>
1769
+ ) -> crate :: Result <MultiResults <' a, ' a , S >>
1769
1770
where
1770
1771
XS : IntoIterator <Item = & ' a I >,
1771
1772
AS : AsRef <[ Option <S >] >,
@@ -1820,6 +1821,7 @@ pub fn sendmmsg<'a, XS, AS, C, I, S>(
1820
1821
Ok ( MultiResults {
1821
1822
rmm: data,
1822
1823
current_index: 0 ,
1824
+ slices: PhantomData ,
1823
1825
received: sent
1824
1826
} )
1825
1827
@@ -1908,16 +1910,16 @@ impl<S> MultiHeaders<S> {
1908
1910
// always produce the desired results - see https://github.com/nix-rust/nix/pull/1744 for more
1909
1911
// details
1910
1912
#[ cfg( any( linux_android, target_os = "freebsd" , target_os = "netbsd" ) ) ]
1911
- pub fn recvmmsg<' a , XS , S , I >(
1913
+ pub fn recvmmsg<' hdr , ' iter , ' data , XS , S , I >(
1912
1914
fd: RawFd ,
1913
- data: & ' a mut MultiHeaders <S >,
1915
+ data: & ' hdr mut MultiHeaders <S >,
1914
1916
slices: XS ,
1915
1917
flags: MsgFlags ,
1916
1918
mut timeout: Option <crate :: sys:: time:: TimeSpec >,
1917
- ) -> crate :: Result <MultiResults <' a , S >>
1919
+ ) -> crate :: Result <MultiResults <' hdr , ' data , S >>
1918
1920
where
1919
- XS : IntoIterator <Item = & ' a mut I >,
1920
- I : AsMut <[ IoSliceMut <' a >] > + ' a ,
1921
+ XS : IntoIterator <Item = & ' iter mut I >,
1922
+ I : AsMut <[ IoSliceMut <' data >] > + ' iter ,
1921
1923
{
1922
1924
let mut count = 0 ;
1923
1925
for ( i, ( slice, mmsghdr) ) in slices. into_iter( ) . zip( data. items. iter_mut( ) ) . enumerate( ) {
@@ -1949,6 +1951,7 @@ where
1949
1951
} ) ? as usize ;
1950
1952
1951
1953
Ok ( MultiResults {
1954
+ slices: PhantomData ,
1952
1955
rmm: data,
1953
1956
current_index: 0 ,
1954
1957
received,
@@ -1958,19 +1961,20 @@ where
1958
1961
/// Iterator over results of [`recvmmsg`]/[`sendmmsg`]
1959
1962
#[ cfg( any( linux_android, target_os = "freebsd" , target_os = "netbsd" ) ) ]
1960
1963
#[ derive( Debug ) ]
1961
- pub struct MultiResults <' a , S > {
1964
+ pub struct MultiResults <' hdrs , ' data , S > {
1962
1965
// preallocated structures
1963
- rmm: & ' a MultiHeaders <S >,
1966
+ rmm: & ' hdrs MultiHeaders <S >,
1967
+ slices: PhantomData <& ' data ( ) >,
1964
1968
current_index: usize ,
1965
1969
received: usize ,
1966
1970
}
1967
1971
1968
1972
#[ cfg( any( linux_android, target_os = "freebsd" , target_os = "netbsd" ) ) ]
1969
- impl <' a , S > Iterator for MultiResults <' a , S >
1973
+ impl <' hdrs , ' data , S > Iterator for MultiResults <' hdrs , ' data , S >
1970
1974
where
1971
1975
S : Copy + SockaddrLike ,
1972
1976
{
1973
- type Item = RecvMsg <' a , ' a , S >;
1977
+ type Item = RecvMsg <' hdrs , ' data , S >;
1974
1978
1975
1979
// The cast is not unnecessary on all platforms.
1976
1980
#[ allow( clippy:: unnecessary_cast) ]
0 commit comments