Merge branch 'fix-accept-hang' into 'master'

Fix accept() hang, don't accept() on recvfrom

See merge request redox-os/relibc!876
This commit is contained in:
Jeremy Soller
2026-01-08 06:12:07 -07:00
3 changed files with 9 additions and 13 deletions
+3 -7
View File
@@ -137,7 +137,7 @@ unsafe fn inner_af_inet(
let ret = sockaddr_in {
sin_family: AF_INET as sa_family_t,
sin_port: port,
sin_port: u16::to_be(port),
sin_addr: addr,
..sockaddr_in::default()
@@ -808,12 +808,8 @@ impl PalSocket for Sys {
if address == ptr::null_mut() || address_len == ptr::null_mut() {
Self::read(socket, slice::from_raw_parts_mut(buf as *mut u8, len))
} else {
let fd = FdGuard::new(syscall::dup(socket as usize, b"listen")?);
Self::getpeername(fd.as_c_fd().unwrap(), address, address_len)?;
Self::read(
fd.as_c_fd().unwrap(),
slice::from_raw_parts_mut(buf as *mut u8, len),
)
Self::getpeername(socket, address, address_len)?;
Self::read(socket, slice::from_raw_parts_mut(buf as *mut u8, len))
}
}
+3 -3
View File
@@ -13,9 +13,6 @@ FAILING_TESTS=tls \
stdlib/ptsname \
sys_mman \
signals/pthread_kill-child \
sys_socket/getpeername \
sys_socket/recv \
sys_socket/recvfrom \
sys_socket/unixpeername \
sys_socket/unixrecvfrom \
unistd/isatty \
@@ -273,6 +270,9 @@ VARIED_NAMES=\
stdlib/realpath \
sys_epoll/epoll \
sys_resource/constants \
sys_socket/getpeername \
sys_socket/recv \
sys_socket/recvfrom \
sys_stat/stat \
sys_statvfs/statvfs \
sys_utsname/uname \
+3 -3
View File
@@ -20,7 +20,7 @@ int main(void)
ERROR_IF(bind, status, == -1);
status = listen(listen_fd, 1);
ERROR_IF(bind, status, == -1);
ERROR_IF(listen, status, == -1);
status = getsockname(listen_fd, saddr, &addr_len);
ERROR_IF(getsockname, status, == -1);
@@ -32,11 +32,11 @@ int main(void)
ERROR_IF(connect, status, == -1);
int server_fd = accept(listen_fd, NULL, NULL);
ERROR_IF(connect, status, == -1);
ERROR_IF(accept, status, == -1);
char *c = "foo";
status = send(server_fd, c, 4, 0);
ERROR_IF(sendto, status, == -1);
ERROR_IF(send, status, == -1);
char x[4];
ssize_t amount = recv(client_fd, x, 4, 0);