v / vlib / net / socket_options.c.v
65 lines · 60 sloc · 1.71 KB · 49bade567852d01003fa48c777259ec36dd7d2b6
Raw
1module net
2
3// Protocol specifies the IP protocol to use with raw sockets.
4pub enum Protocol {
5 not_set = 0
6 icmp = C.IPPROTO_ICMP
7 tcp = C.IPPROTO_TCP
8 udp = C.IPPROTO_UDP
9 ipv6 = C.IPPROTO_IPV6
10 raw = C.IPPROTO_RAW
11 icmpv6 = C.IPPROTO_ICMPV6
12}
13
14pub enum SocketOption {
15 // TODO: SO_ACCEPT_CONN is not here because windows doesn't support it
16 // and there is no easy way to define it
17 broadcast = C.SO_BROADCAST
18 debug = C.SO_DEBUG
19 dont_route = C.SO_DONTROUTE
20 error = C.SO_ERROR
21 keep_alive = C.SO_KEEPALIVE
22 linger = C.SO_LINGER
23 oob_inline = C.SO_OOBINLINE
24 reuse_addr = C.SO_REUSEADDR
25 receive_buf_size = C.SO_RCVBUF
26 receive_low_size = C.SO_RCVLOWAT
27 receive_timeout = C.SO_RCVTIMEO
28 send_buf_size = C.SO_SNDBUF
29 send_low_size = C.SO_SNDLOWAT
30 send_timeout = C.SO_SNDTIMEO
31 socket_type = C.SO_TYPE
32 ipv6_only = C.IPV6_V6ONLY
33 ip_proto_ipv6 = C.IPPROTO_IPV6
34 // reuse_port = C.SO_REUSEPORT // TODO make it work in windows
35 // tcp_fastopen = C.TCP_FASTOPEN // TODO make it work in windows
36 // tcp_quickack = C.TCP_QUICKACK // TODO make it work in os != linux
37 // tcp_defer_accept = C.TCP_DEFER_ACCEPT // TODO make it work in windows
38}
39
40pub const opts_bool = [SocketOption.broadcast, .debug, .dont_route, .error, .keep_alive, .oob_inline]
41
42pub const opts_int = [
43 SocketOption.receive_buf_size,
44 .receive_low_size,
45 .receive_timeout,
46 .send_buf_size,
47 .send_low_size,
48 .send_timeout,
49]
50
51pub const opts_can_set = [
52 SocketOption.broadcast,
53 .debug,
54 .dont_route,
55 .keep_alive,
56 .linger,
57 .oob_inline,
58 .receive_buf_size,
59 .receive_low_size,
60 .receive_timeout,
61 .send_buf_size,
62 .send_low_size,
63 .send_timeout,
64 .ipv6_only,
65]
66