@@ -1765,7 +1765,7 @@ pub fn sendmmsg<'a, XS, AS, C, I, S>(
17651765 // shared across all the messages
17661766 cmsgs: C ,
17671767 flags: MsgFlags
1768- ) -> crate :: Result <MultiResults <' a, S >>
1768+ ) -> crate :: Result <MultiResults <' a, ' a , S >>
17691769 where
17701770 XS : IntoIterator <Item = & ' a I >,
17711771 AS : AsRef <[ Option <S >] >,
@@ -1820,6 +1820,7 @@ pub fn sendmmsg<'a, XS, AS, C, I, S>(
18201820 Ok ( MultiResults {
18211821 rmm: data,
18221822 current_index: 0 ,
1823+ slices: std:: marker:: PhantomData ,
18231824 received: sent
18241825 } )
18251826
@@ -1908,16 +1909,16 @@ impl<S> MultiHeaders<S> {
19081909// always produce the desired results - see https://github.com/nix-rust/nix/pull/1744 for more
19091910// details
19101911#[ cfg( any( linux_android, target_os = "freebsd" , target_os = "netbsd" ) ) ]
1911- pub fn recvmmsg<' a , XS , S , I >(
1912+ pub fn recvmmsg<' hdr , ' iter , ' data , XS , S , I >(
19121913 fd: RawFd ,
1913- data: & ' a mut MultiHeaders <S >,
1914+ data: & ' hdr mut MultiHeaders <S >,
19141915 slices: XS ,
19151916 flags: MsgFlags ,
19161917 mut timeout: Option <crate :: sys:: time:: TimeSpec >,
1917- ) -> crate :: Result <MultiResults <' a , S >>
1918+ ) -> crate :: Result <MultiResults <' hdr , ' data , S >>
19181919where
1919- XS : IntoIterator <Item = & ' a mut I >,
1920- I : AsMut <[ IoSliceMut <' a >] > + ' a ,
1920+ XS : IntoIterator <Item = & ' iter mut I >,
1921+ I : AsMut <[ IoSliceMut <' data >] > + ' iter ,
19211922{
19221923 let mut count = 0 ;
19231924 for ( i, ( slice, mmsghdr) ) in slices. into_iter( ) . zip( data. items. iter_mut( ) ) . enumerate( ) {
@@ -1949,6 +1950,7 @@ where
19491950 } ) ? as usize ;
19501951
19511952 Ok ( MultiResults {
1953+ slices: std:: marker:: PhantomData ,
19521954 rmm: data,
19531955 current_index: 0 ,
19541956 received,
@@ -1958,19 +1960,20 @@ where
19581960/// Iterator over results of [`recvmmsg`]/[`sendmmsg`]
19591961 #[ cfg( any( linux_android, target_os = "freebsd" , target_os = "netbsd" ) ) ]
19601962#[ derive( Debug ) ]
1961- pub struct MultiResults <' a , S > {
1963+ pub struct MultiResults <' hdrs , ' data , S > {
19621964 // preallocated structures
1963- rmm: & ' a MultiHeaders <S >,
1965+ rmm: & ' hdrs MultiHeaders <S >,
1966+ slices: std:: marker:: PhantomData <& ' data ( ) >,
19641967 current_index: usize ,
19651968 received: usize ,
19661969}
19671970
19681971#[ cfg( any( linux_android, target_os = "freebsd" , target_os = "netbsd" ) ) ]
1969- impl <' a , S > Iterator for MultiResults <' a , S >
1972+ impl <' hdrs , ' data , S > Iterator for MultiResults <' hdrs , ' data , S >
19701973where
19711974 S : Copy + SockaddrLike ,
19721975{
1973- type Item = RecvMsg <' a , ' a , S >;
1976+ type Item = RecvMsg <' hdrs , ' data , S >;
19741977
19751978 // The cast is not unnecessary on all platforms.
19761979 #[ allow( clippy:: unnecessary_cast) ]
0 commit comments