mirror of
https://github.com/YGGverse/aquatic.git
synced 2026-03-31 09:45:31 +00:00
Merge pull request #194 from valpackett/musl
udp: fix msghdr creation on musl libc
This commit is contained in:
commit
9c185a9595
2 changed files with 18 additions and 28 deletions
|
|
@ -1,6 +1,6 @@
|
|||
use std::{
|
||||
mem::MaybeUninit,
|
||||
net::{Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6},
|
||||
ptr::null_mut,
|
||||
};
|
||||
|
||||
use aquatic_common::CanonicalSocketAddr;
|
||||
|
|
@ -39,15 +39,13 @@ impl RecvHelper {
|
|||
sin_zero: [0; 8],
|
||||
}));
|
||||
|
||||
let msghdr_v4 = Box::into_raw(Box::new(libc::msghdr {
|
||||
msg_name: name_v4 as *mut libc::c_void,
|
||||
msg_namelen: core::mem::size_of::<libc::sockaddr_in>() as u32,
|
||||
msg_iov: null_mut(),
|
||||
msg_iovlen: 0,
|
||||
msg_control: null_mut(),
|
||||
msg_controllen: 0,
|
||||
msg_flags: 0,
|
||||
}));
|
||||
// XXX: on musl libc, msghdr contains private padding fields
|
||||
let msghdr_v4 = unsafe {
|
||||
let mut hdr = MaybeUninit::<libc::msghdr>::zeroed().assume_init();
|
||||
hdr.msg_name = name_v4 as *mut libc::c_void;
|
||||
hdr.msg_namelen = core::mem::size_of::<libc::sockaddr_in>() as u32;
|
||||
Box::into_raw(Box::new(hdr))
|
||||
};
|
||||
|
||||
let name_v6 = Box::into_raw(Box::new(libc::sockaddr_in6 {
|
||||
sin6_family: 0,
|
||||
|
|
@ -57,15 +55,13 @@ impl RecvHelper {
|
|||
sin6_scope_id: 0,
|
||||
}));
|
||||
|
||||
let msghdr_v6 = Box::into_raw(Box::new(libc::msghdr {
|
||||
msg_name: name_v6 as *mut libc::c_void,
|
||||
msg_namelen: core::mem::size_of::<libc::sockaddr_in6>() as u32,
|
||||
msg_iov: null_mut(),
|
||||
msg_iovlen: 0,
|
||||
msg_control: null_mut(),
|
||||
msg_controllen: 0,
|
||||
msg_flags: 0,
|
||||
}));
|
||||
// XXX: on musl libc, msghdr contains private padding fields
|
||||
let msghdr_v6 = unsafe {
|
||||
let mut hdr = MaybeUninit::<libc::msghdr>::zeroed().assume_init();
|
||||
hdr.msg_name = name_v6 as *mut libc::c_void;
|
||||
hdr.msg_namelen = core::mem::size_of::<libc::sockaddr_in6>() as u32;
|
||||
Box::into_raw(Box::new(hdr))
|
||||
};
|
||||
|
||||
Self {
|
||||
socket_is_ipv4: config.network.address.is_ipv4(),
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
use std::{
|
||||
io::Cursor,
|
||||
iter::repeat_with,
|
||||
mem::MaybeUninit,
|
||||
net::SocketAddr,
|
||||
ptr::{addr_of_mut, null_mut},
|
||||
};
|
||||
|
|
@ -135,21 +136,14 @@ impl SendBuffer {
|
|||
iov_base: null_mut(),
|
||||
iov_len: 0,
|
||||
},
|
||||
msghdr: libc::msghdr {
|
||||
msg_name: null_mut(),
|
||||
msg_namelen: 0,
|
||||
msg_iov: null_mut(),
|
||||
msg_iovlen: 1,
|
||||
msg_control: null_mut(),
|
||||
msg_controllen: 0,
|
||||
msg_flags: 0,
|
||||
},
|
||||
msghdr: unsafe { MaybeUninit::<libc::msghdr>::zeroed().assume_init() },
|
||||
});
|
||||
|
||||
instance.iovec.iov_base = addr_of_mut!(instance.bytes) as *mut libc::c_void;
|
||||
instance.iovec.iov_len = instance.bytes.len();
|
||||
|
||||
instance.msghdr.msg_iov = addr_of_mut!(instance.iovec);
|
||||
instance.msghdr.msg_iovlen = 1;
|
||||
|
||||
if socket_is_ipv4 {
|
||||
instance.msghdr.msg_name = addr_of_mut!(instance.name_v4) as *mut libc::c_void;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue