wasmer_wasix/syscalls/wasix/
sock_get_opt_time.rs1use super::*;
2use crate::{net::socket::TimeType, syscalls::*};
3
4#[instrument(level = "trace", skip_all, fields(%sock, %opt), ret)]
12pub fn sock_get_opt_time<M: MemorySize>(
13 mut ctx: FunctionEnvMut<'_, WasiEnv>,
14 sock: WasiFd,
15 opt: Sockoption,
16 ret_time: WasmPtr<OptionTimestamp, M>,
17) -> Errno {
18 let ty = match opt {
19 Sockoption::RecvTimeout => TimeType::ReadTimeout,
20 Sockoption::SendTimeout => TimeType::WriteTimeout,
21 Sockoption::ConnectTimeout => TimeType::ConnectTimeout,
22 Sockoption::AcceptTimeout => TimeType::AcceptTimeout,
23 Sockoption::Linger => TimeType::Linger,
24 _ => return Errno::Inval,
25 };
26
27 let time = wasi_try!(__sock_actor(
28 &mut ctx,
29 sock,
30 Rights::empty(),
31 |socket, _| socket.opt_time(ty)
32 ));
33
34 let env = ctx.data();
35 let memory = unsafe { env.memory_view(&ctx) };
36
37 let time = match time {
38 None => OptionTimestamp {
39 tag: OptionTag::None,
40 u: 0,
41 },
42 Some(timeout) => OptionTimestamp {
43 tag: OptionTag::Some,
44 u: timeout.as_nanos() as Timestamp,
45 },
46 };
47
48 wasi_try_mem!(ret_time.write(&memory, time));
49
50 Errno::Success
51}