mirror of
https://github.com/YGGverse/aquatic.git
synced 2026-03-31 17:55:36 +00:00
udp: fix msghdr creation on musl libc
Right now building for musl also requires updating glommio to a git version.
This commit is contained in:
parent
842dd89292
commit
2d18eb6686
2 changed files with 18 additions and 28 deletions
|
|
@ -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(),
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue