752bceb3e9
Add three relibc patches (42 total) to close QtNetwork-critical socket gaps: - P3-inet6-pton-ntop: AF_INET6 address parsing/formatting with RFC 5952 shorthand, IPv4-mapped suffix support - P3-tcp-sockopt-forward: forward IPPROTO_TCP getsockopt/setsockopt to scheme daemon instead of hitting todo_skip - P3-dns-aaaa-getaddrinfo-ipv6: AAAA DNS record queries, lookup_host_v6, dual-stack getaddrinfo with sockaddr_in6 entries Also fix P3-tcp-nodelay to use sys_call_wo + from_raw_parts (const) in the SOL_SOCKET setsockopt fallback — setsockopt sends data to the kernel, not reads from it.
60 lines
2.3 KiB
Diff
60 lines
2.3 KiB
Diff
diff --git a/src/platform/redox/socket.rs b/src/platform/redox/socket.rs
|
|
index d223c36f..f8a1c2e0 100644
|
|
--- a/src/platform/redox/socket.rs
|
|
+++ b/src/platform/redox/socket.rs
|
|
@@ -774,6 +774,21 @@ impl PalSocket for Sys {
|
|
return Ok(());
|
|
}
|
|
},
|
|
+ crate::header::sys_socket::constants::IPPROTO_TCP => {
|
|
+ let metadata = [SocketCall::GetSockOpt as u64, option_name as u64];
|
|
+ let payload =
|
|
+ unsafe { slice::from_raw_parts_mut(option_value as *mut u8, option_len) };
|
|
+ let call_flags = CallFlags::empty();
|
|
+ unsafe {
|
|
+ *option_len_ptr = redox_rt::sys::sys_call_ro(
|
|
+ socket as usize,
|
|
+ payload,
|
|
+ CallFlags::empty(),
|
|
+ &metadata,
|
|
+ )? as socklen_t;
|
|
+ }
|
|
+ return Ok(());
|
|
+ }
|
|
_ => (),
|
|
}
|
|
|
|
@@ -1069,18 +1069,13 @@ impl PalSocket for Sys {
|
|
crate::header::sys_socket::constants::IPPROTO_TCP => {
|
|
- match option_name {
|
|
- crate::header::sys_socket::constants::TCP_NODELAY => {
|
|
- let metadata = [SocketCall::SetSockOpt as u64, option_name as u64];
|
|
- let payload = unsafe {
|
|
- slice::from_raw_parts(option_value as *const u8, option_len as usize)
|
|
- };
|
|
- redox_rt::sys::sys_call_wo(
|
|
- socket as usize,
|
|
- payload,
|
|
- CallFlags::empty(),
|
|
- &metadata,
|
|
- )?;
|
|
- return Ok(());
|
|
- }
|
|
- _ => (),
|
|
- }
|
|
+ let metadata = [SocketCall::SetSockOpt as u64, option_name as u64];
|
|
+ let payload = unsafe {
|
|
+ slice::from_raw_parts(option_value as *const u8, option_len as usize)
|
|
+ };
|
|
+ redox_rt::sys::sys_call_wo(
|
|
+ socket as usize,
|
|
+ payload,
|
|
+ CallFlags::empty(),
|
|
+ &metadata,
|
|
+ )?;
|
|
+ return Ok(());
|
|
}
|
|
_ => (),
|
|
}
|
|
|