| 1 | module net |
| 2 | |
| 3 | // Protocol specifies the IP protocol to use with raw sockets. |
| 4 | pub 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 | |
| 14 | pub 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 | |
| 40 | pub const opts_bool = [SocketOption.broadcast, .debug, .dont_route, .error, .keep_alive, .oob_inline] |
| 41 | |
| 42 | pub 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 | |
| 51 | pub 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 | |