mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-24 18:03:25 +00:00
Add network syscalls
This commit is contained in:
committed by
Tate, Hongliang Tian
parent
8719234dc2
commit
2b59a406a6
21
services/libs/jinux-std/src/syscall/getsockname.rs
Normal file
21
services/libs/jinux-std/src/syscall/getsockname.rs
Normal file
@ -0,0 +1,21 @@
|
||||
use crate::fs::file_table::FileDescripter;
|
||||
use crate::log_syscall_entry;
|
||||
use crate::prelude::*;
|
||||
use crate::util::write_socket_addr_to_user;
|
||||
|
||||
use super::SyscallReturn;
|
||||
use super::SYS_GETSOCKNAME;
|
||||
|
||||
pub fn sys_getsockname(sockfd: FileDescripter, addr: Vaddr, addrlen: u32) -> Result<SyscallReturn> {
|
||||
log_syscall_entry!(SYS_GETSOCKNAME);
|
||||
debug!("sockfd = {sockfd}, addr = 0x{addr:x}, addrlen = {addrlen}");
|
||||
let socket_addr = {
|
||||
let current = current!();
|
||||
let file_table = current.file_table().lock();
|
||||
let socket = file_table.get_socket(sockfd)?;
|
||||
socket.addr()?
|
||||
};
|
||||
// FIXME: trunscate write len if addrlen is not big enough
|
||||
write_socket_addr_to_user(&socket_addr, addr, addrlen as usize)?;
|
||||
Ok(SyscallReturn::Return(0))
|
||||
}
|
Reference in New Issue
Block a user