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:
@@ -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
@@ -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 \
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user