Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.95 KB | None | 0 0
  1. struct Foo {
  2. packet_bufs: Vec<Vec<u8>>,
  3. sockaddrs: Vec<std::net::SocketAddr>,
  4. lengths: Vec<usize>,
  5. }
  6.  
  7. impl Foo {
  8. fn doit1(&mut self, sock: &std::net::UdpSocket) -> Result<usize, std::io::Error> {
  9. // trying to get rid of the allocation for this Vec
  10. let mut iovecs: Vec<[&mut [u8]; 1]> = self.packet_bufs
  11. .iter_mut()
  12. .map(|pk| {
  13. let iov = &mut pk[..];
  14. [iov]
  15. })
  16. .collect();
  17. Self::doit3(sock, &mut self.sockaddrs[..], &mut self.lengths, &mut iovecs[..])
  18. }
  19.  
  20. fn doit2(&mut self, sock: &std::net::UdpSocket) -> Result<usize, std::io::Error> {
  21. // switching the code to ArrayVec doesn't compile
  22. let mut iovecs: arrayvec::ArrayVec<[[&mut [u8]; 1]; 8]> = self.packet_bufs
  23. .iter_mut()
  24. .map(|pk| {
  25. let iov = &mut pk[..];
  26. [iov]
  27. })
  28. .collect();
  29. Self::doit3(sock, &mut self.sockaddrs[..], &mut self.lengths, &mut iovecs[..])
  30. // ^^^^^^ borrowed value does not live long enough
  31. }
  32. // | `iovecs` dropped here while still borrowed
  33.  
  34.  
  35. fn doit3<'a, 'b: 'a>(
  36. _sock: &'a std::net::UdpSocket,
  37. _sockaddrs: &'a mut [std::net::SocketAddr],
  38. _lengths: &mut Vec<usize>,
  39. _iovecs: &'b mut [[&'a mut [u8]; 1]],
  40. ) -> Result<usize, std::io::Error> {
  41. //let mut recv_headers: arrayvec::ArrayVec<[RecvMMsgHdr<'_>; 8]> = iovecs
  42. // .iter_mut()
  43. // .zip(sockaddrs.iter_mut())
  44. // .map(|(iov, sockaddr)| {
  45. // RecvMMsgHdr::new(iov, None, MsgFlags::empty(), Some(sockaddr))
  46. // })
  47. // .collect();
  48. //let size = recvmmsg(sock.as_raw_fd(), &mut recv_headers[..], MsgFlags::empty(), None)?;
  49. //lengths.extend(recv_headers.drain(..size).map(|hdr| hdr.msg_len()));
  50. //Ok(size)
  51. Ok(0)
  52. }
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement