wasmer_wasix/syscalls/wasix/
sock_status.rs

1use super::*;
2use crate::syscalls::*;
3
4/// ### `sock_status()`
5/// Returns the current status of a socket
6#[instrument(level = "trace", skip_all, fields(%sock, status = field::Empty), ret)]
7pub fn sock_status<M: MemorySize>(
8    mut ctx: FunctionEnvMut<'_, WasiEnv>,
9    sock: WasiFd,
10    ret_status: WasmPtr<Sockstatus, M>,
11) -> Errno {
12    let status = wasi_try!(__sock_actor(
13        &mut ctx,
14        sock,
15        Rights::empty(),
16        |socket, _| socket.status()
17    ));
18
19    use crate::net::socket::WasiSocketStatus;
20    let status = match status {
21        WasiSocketStatus::Opening => Sockstatus::Opening,
22        WasiSocketStatus::Opened => Sockstatus::Opened,
23        WasiSocketStatus::Closed => Sockstatus::Closed,
24        WasiSocketStatus::Failed => Sockstatus::Failed,
25    };
26    Span::current().record("status", format!("{status:?}"));
27
28    let env = ctx.data();
29    let memory = unsafe { env.memory_view(&ctx) };
30    wasi_try_mem!(ret_status.write(&memory, status));
31    Errno::Success
32}