rl_lang/interpreter/stdlib/net/
tcp_set_nonblocking.rs1use crate::interpreter::{
2 evaluator::Evaluator,
3 stdlib::{
4 common::{extract_number, verr, vnl, vok, vs},
5 net::NetHandle,
6 },
7 values::Value,
8};
9
10pub fn func(eval: &mut Evaluator, id: Value, flag: bool) -> Value {
11 let id = match extract_number(id, "tcp_set_nonblocking") {
12 Ok(a) if a as i64 >= 0 => a as i64,
13 Ok(_) => {
14 return verr!(vs!(
15 "tcp_set_nonblocking: id handle cannot be negative".to_string()
16 ));
17 }
18 Err(e) => return verr!(vs!(format!("tcp_set_nonblocking: {}", e))),
19 };
20 let stream = match eval.net_handles.get(&id) {
21 Some(NetHandle::TcpStream(stream)) => stream,
22 Some(_) => {
23 return verr!(vs!(format!(
24 "tcp_set_nonblocking: handle {} is not a TCP stream",
25 id
26 )));
27 }
28 None => {
29 return verr!(vs!(format!("tcp_set_nonblocking: unknown handle {}", id)));
30 }
31 };
32 match stream.set_nonblocking(flag) {
33 Ok(()) => vok!(vnl!()),
34 Err(e) => verr!(vs!(format!("tcp_set_nonblocking: {}", e))),
35 }
36}