From bf5e176176bb816756e86cf1c790a3df17ab9690 Mon Sep 17 00:00:00 2001 From: Jiajie Chen Date: Thu, 7 Mar 2019 18:07:54 +0800 Subject: [PATCH] Implement sys_shutdown --- kernel/src/syscall/mod.rs | 2 +- kernel/src/syscall/net.rs | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/kernel/src/syscall/mod.rs b/kernel/src/syscall/mod.rs index f6933c5..3424215 100644 --- a/kernel/src/syscall/mod.rs +++ b/kernel/src/syscall/mod.rs @@ -63,7 +63,7 @@ pub fn syscall(id: usize, args: [usize; 6], tf: &mut TrapFrame) -> isize { 045 => sys_recvfrom(args[0], args[1] as *mut u8, args[2], args[3], args[4] as *mut SockaddrIn, args[5] as *mut u32), // 046 => sys_sendmsg(), // 047 => sys_recvmsg(), -// 048 => sys_shutdown(), + 048 => sys_shutdown(args[0], args[1]), 049 => sys_bind(args[0], args[1] as *const SockaddrIn, args[2]), 050 => sys_listen(args[0], args[1]), 051 => sys_getsockname(args[0], args[1] as *mut SockaddrIn, args[2] as *mut u32), diff --git a/kernel/src/syscall/net.rs b/kernel/src/syscall/net.rs index b14c0e9..89836c6 100644 --- a/kernel/src/syscall/net.rs +++ b/kernel/src/syscall/net.rs @@ -515,6 +515,22 @@ pub fn sys_listen(fd: usize, backlog: usize) -> SysResult { } } +pub fn sys_shutdown(fd: usize, how: usize) -> SysResult { + info!("sys_shutdown: fd: {} how: {}", fd, how); + let mut proc = process(); + + let iface = &*(NET_DRIVERS.read()[0]); + let wrapper = proc.get_socket_mut(fd)?; + if let SocketType::Tcp(Some(endpoint)) = wrapper.socket_type { + let mut sockets = iface.sockets(); + let mut socket = sockets.get::(wrapper.handle); + socket.close(); + Ok(0) + } else { + Err(SysError::EINVAL) + } +} + pub fn sys_accept(fd: usize, addr: *mut SockaddrIn, addr_len: *mut u32) -> SysResult { info!( "sys_accept: fd: {} addr: {:?} addr_len: {:?}",