Enable syscall restart

This commit is contained in:
Zejun Zhao
2024-12-16 11:32:37 +08:00
committed by Tate, Hongliang Tian
parent ced0023d6b
commit 1b56a8b600
15 changed files with 103 additions and 38 deletions

View File

@ -25,7 +25,13 @@ pub fn sys_recvmsg(
let (total_bytes, message_header) = {
let socket = get_socket_from_fd(sockfd)?;
let mut io_vec_writer = c_user_msghdr.copy_writer_array_from_user(ctx)?;
socket.recvmsg(&mut io_vec_writer, flags)?
socket
.recvmsg(&mut io_vec_writer, flags)
.map_err(|err| match err.error() {
// FIXME: `recvmsg` should not be restarted if a timeout has been set on the socket using `setsockopt`.
Errno::EINTR => Error::new(Errno::ERESTARTSYS),
_ => err,
})?
};
if let Some(addr) = message_header.addr() {