Merge branch 'master' into work-2024-03-30

This commit is contained in:
Joakim Frostegård 2024-03-30 10:56:51 +01:00 committed by GitHub
commit c7ff406182
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 18 additions and 28 deletions

View file

@ -1,6 +1,6 @@
use std::{ use std::{
mem::MaybeUninit,
net::{Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6}, net::{Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6},
ptr::null_mut,
}; };
use aquatic_common::CanonicalSocketAddr; use aquatic_common::CanonicalSocketAddr;
@ -39,15 +39,13 @@ impl RecvHelper {
sin_zero: [0; 8], sin_zero: [0; 8],
})); }));
let msghdr_v4 = Box::into_raw(Box::new(libc::msghdr { // XXX: on musl libc, msghdr contains private padding fields
msg_name: name_v4 as *mut libc::c_void, let msghdr_v4 = unsafe {
msg_namelen: core::mem::size_of::<libc::sockaddr_in>() as u32, let mut hdr = MaybeUninit::<libc::msghdr>::zeroed().assume_init();
msg_iov: null_mut(), hdr.msg_name = name_v4 as *mut libc::c_void;
msg_iovlen: 0, hdr.msg_namelen = core::mem::size_of::<libc::sockaddr_in>() as u32;
msg_control: null_mut(), Box::into_raw(Box::new(hdr))
msg_controllen: 0, };
msg_flags: 0,
}));
let name_v6 = Box::into_raw(Box::new(libc::sockaddr_in6 { let name_v6 = Box::into_raw(Box::new(libc::sockaddr_in6 {
sin6_family: 0, sin6_family: 0,
@ -57,15 +55,13 @@ impl RecvHelper {
sin6_scope_id: 0, sin6_scope_id: 0,
})); }));
let msghdr_v6 = Box::into_raw(Box::new(libc::msghdr { // XXX: on musl libc, msghdr contains private padding fields
msg_name: name_v6 as *mut libc::c_void, let msghdr_v6 = unsafe {
msg_namelen: core::mem::size_of::<libc::sockaddr_in6>() as u32, let mut hdr = MaybeUninit::<libc::msghdr>::zeroed().assume_init();
msg_iov: null_mut(), hdr.msg_name = name_v6 as *mut libc::c_void;
msg_iovlen: 0, hdr.msg_namelen = core::mem::size_of::<libc::sockaddr_in6>() as u32;
msg_control: null_mut(), Box::into_raw(Box::new(hdr))
msg_controllen: 0, };
msg_flags: 0,
}));
Self { Self {
socket_is_ipv4: config.network.address.is_ipv4(), socket_is_ipv4: config.network.address.is_ipv4(),

View file

@ -1,6 +1,7 @@
use std::{ use std::{
io::Cursor, io::Cursor,
iter::repeat_with, iter::repeat_with,
mem::MaybeUninit,
net::SocketAddr, net::SocketAddr,
ptr::{addr_of_mut, null_mut}, ptr::{addr_of_mut, null_mut},
}; };
@ -135,21 +136,14 @@ impl SendBuffer {
iov_base: null_mut(), iov_base: null_mut(),
iov_len: 0, iov_len: 0,
}, },
msghdr: libc::msghdr { msghdr: unsafe { MaybeUninit::<libc::msghdr>::zeroed().assume_init() },
msg_name: null_mut(),
msg_namelen: 0,
msg_iov: null_mut(),
msg_iovlen: 1,
msg_control: null_mut(),
msg_controllen: 0,
msg_flags: 0,
},
}); });
instance.iovec.iov_base = addr_of_mut!(instance.bytes) as *mut libc::c_void; instance.iovec.iov_base = addr_of_mut!(instance.bytes) as *mut libc::c_void;
instance.iovec.iov_len = instance.bytes.len(); instance.iovec.iov_len = instance.bytes.len();
instance.msghdr.msg_iov = addr_of_mut!(instance.iovec); instance.msghdr.msg_iov = addr_of_mut!(instance.iovec);
instance.msghdr.msg_iovlen = 1;
if socket_is_ipv4 { if socket_is_ipv4 {
instance.msghdr.msg_name = addr_of_mut!(instance.name_v4) as *mut libc::c_void; instance.msghdr.msg_name = addr_of_mut!(instance.name_v4) as *mut libc::c_void;