mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-20 23:26:32 +00:00
Remove the shim kernel crate
This commit is contained in:
committed by
Tate, Hongliang Tian
parent
d76c7a5b1e
commit
dafd16075f
40
kernel/src/syscall/recvmsg.rs
Normal file
40
kernel/src/syscall/recvmsg.rs
Normal file
@ -0,0 +1,40 @@
|
||||
// SPDX-License-Identifier: MPL-2.0
|
||||
|
||||
use super::SyscallReturn;
|
||||
use crate::{
|
||||
fs::file_table::FileDesc,
|
||||
net::socket::SendRecvFlags,
|
||||
prelude::*,
|
||||
util::net::{get_socket_from_fd, CUserMsgHdr},
|
||||
};
|
||||
|
||||
pub fn sys_recvmsg(
|
||||
sockfd: FileDesc,
|
||||
user_msghdr_ptr: Vaddr,
|
||||
flags: i32,
|
||||
ctx: &Context,
|
||||
) -> Result<SyscallReturn> {
|
||||
let c_user_msghdr: CUserMsgHdr = ctx.get_user_space().read_val(user_msghdr_ptr)?;
|
||||
let flags = SendRecvFlags::from_bits_truncate(flags);
|
||||
|
||||
debug!(
|
||||
"sockfd = {}, user_msghdr = {:x?}, flags = {:?}",
|
||||
sockfd, c_user_msghdr, flags
|
||||
);
|
||||
|
||||
let (total_bytes, message_header) = {
|
||||
let socket = get_socket_from_fd(sockfd)?;
|
||||
let io_vecs = c_user_msghdr.copy_iovs_from_user()?;
|
||||
socket.recvmsg(&io_vecs, flags)?
|
||||
};
|
||||
|
||||
if let Some(addr) = message_header.addr() {
|
||||
c_user_msghdr.write_socket_addr_to_user(addr)?;
|
||||
}
|
||||
|
||||
if c_user_msghdr.msg_control != 0 {
|
||||
warn!("receiving control message is not supported");
|
||||
}
|
||||
|
||||
Ok(SyscallReturn::Return(total_bytes as _))
|
||||
}
|
Reference in New Issue
Block a user