(
fd: i32,
addr: UserPtr<sockaddr>,
addrlen: UserPtr<socklen_t>,
flags: u32,
)
| 110 | } |
| 111 | |
| 112 | pub fn sys_accept4( |
| 113 | fd: i32, |
| 114 | addr: UserPtr<sockaddr>, |
| 115 | addrlen: UserPtr<socklen_t>, |
| 116 | flags: u32, |
| 117 | ) -> AxResult<isize> { |
| 118 | debug!("sys_accept <= fd: {fd}, flags: {flags}"); |
| 119 | |
| 120 | let cloexec = flags & O_CLOEXEC != 0; |
| 121 | |
| 122 | let socket = Socket::from_fd(fd)?; |
| 123 | let socket = Socket(socket.accept()?); |
| 124 | if flags & O_NONBLOCK != 0 { |
| 125 | socket.set_nonblocking(true)?; |
| 126 | } |
| 127 | |
| 128 | let remote_addr = socket.local_addr()?; |
| 129 | let fd = socket.add_to_fd_table(cloexec).map(|fd| fd as isize)?; |
| 130 | debug!("sys_accept => fd: {fd}, addr: {remote_addr:?}"); |
| 131 | |
| 132 | if !addr.is_null() { |
| 133 | remote_addr.write_to_user(addr, addrlen.get_as_mut()?)?; |
| 134 | } |
| 135 | |
| 136 | Ok(fd) |
| 137 | } |
| 138 | |
| 139 | pub fn sys_shutdown(fd: i32, how: u32) -> AxResult<isize> { |
| 140 | debug!("sys_shutdown <= fd: {fd}, how: {how:?}"); |
no test coverage detected