@@ -1512,28 +1512,32 @@ pub fn sendmsg<S>(fd: RawFd, iov: &[IoSlice<'_>], cmsgs: &[ControlMessage],
1512
1512
target_os = "freebsd" ,
1513
1513
target_os = "netbsd" ,
1514
1514
) ) ]
1515
- pub fn sendmmsg<' a, XS , AS , C , I , S >(
1515
+ pub fn sendmmsg<' a, XS , AS , C , CM , I , S >(
1516
1516
fd: RawFd ,
1517
1517
data: & ' a mut MultiHeaders <S >,
1518
1518
slices: XS ,
1519
1519
// one address per group of slices
1520
1520
addrs: AS ,
1521
- // shared across all the messages
1522
- cmsgs : C ,
1521
+ // one group of messages per address
1522
+ cmsgs_iter : C ,
1523
1523
flags: MsgFlags
1524
1524
) -> crate :: Result <MultiResults <' a, S >>
1525
1525
where
1526
1526
XS : IntoIterator <Item = & ' a I >,
1527
1527
AS : AsRef <[ Option <S >] >,
1528
1528
I : AsRef <[ IoSlice <' a>] > + ' a,
1529
- C : AsRef <[ ControlMessage <' a>] > + ' a,
1529
+ C : IntoIterator <Item = CM > + ' a,
1530
+ CM : AsRef <[ ControlMessage <' a>] > + ' a,
1530
1531
S : SockaddrLike + ' a
1531
1532
{
1532
1533
1533
1534
let mut count = 0 ;
1534
1535
1535
1536
1536
- for ( i, ( ( slice, addr) , mmsghdr) ) in slices. into_iter( ) . zip( addrs. as_ref( ) ) . zip( data. items. iter_mut( ) ) . enumerate( ) {
1537
+ for ( i, ( ( ( slice, addr) , mmsghdr) , cmsgs) ) in
1538
+ slices. into_iter( )
1539
+ . zip( addrs. as_ref( ) )
1540
+ . zip( data. items. iter_mut( ) ) . zip( cmsgs_iter. into_iter( ) ) . enumerate( ) {
1537
1541
let p = & mut mmsghdr. msg_hdr;
1538
1542
p. msg_iov = slice. as_ref( ) . as_ptr( ) as * mut libc:: iovec;
1539
1543
p. msg_iovlen = slice. as_ref( ) . len( ) as _;
0 commit comments