MCPcopy Create free account
hub / github.com/Starry-OS/StarryOS / sys_accept4

Function sys_accept4

api/src/syscall/net/socket.rs:112–137  ·  view source on GitHub ↗
(
    fd: i32,
    addr: UserPtr<sockaddr>,
    addrlen: UserPtr<socklen_t>,
    flags: u32,
)

Source from the content-addressed store, hash-verified

110}
111
112pub 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
139pub fn sys_shutdown(fd: i32, how: u32) -> AxResult<isize> {
140 debug!("sys_shutdown <= fd: {fd}, how: {how:?}");

Callers 2

handle_syscallFunction · 0.85
sys_acceptFunction · 0.85

Calls 6

SocketClass · 0.85
add_to_fd_tableMethod · 0.80
is_nullMethod · 0.80
write_to_userMethod · 0.80
get_as_mutMethod · 0.80
set_nonblockingMethod · 0.45

Tested by

no test coverage detected