Skip to content

netio #

Networking Library for V

netio is a flexible networking library for V programming language.

This module provides the low-level wrappers around C APIs and supports any kind of sockets, socket options, address families and protocols. netio.protocol submodule provides access to the operatins system protocols database.

netio is tested only on Linux, but should work on all POSIX-compliant operating systems. Microsoft Windows support is not planned yet.

See examples/ dir in source code repository for usage examples.

Constants #

const sol_socket = SocketLevel(C.SOL_SOCKET)
const sock_raw = SocketType(C.SOCK_RAW)
const sock_seqpacket = SocketType(C.SOCK_SEQPACKET)
const sock_dgram = SocketType(C.SOCK_DGRAM)
const sock_stream = SocketType(C.SOCK_STREAM)
const af_inet6 = AddrFamily(C.AF_INET6)
const af_inet = AddrFamily(C.AF_INET)
const af_unix = AddrFamily(C.AF_UNIX)
const af_unspec = AddrFamily(C.AF_UNSPEC)
const udp_segment = SocketOption(103) // UDP_SEGMENT
const udp_no_check6_tx = SocketOption(101) // UDP_NO_CHECK6_TX
const udp_no_check6_rx = SocketOption(102) // UDP_NO_CHECK6_RX
const udp_gro = SocketOption(104) // UDP_GRO
const udp_encap_l2tpinudp = SocketOption(3) // UDP_ENCAP_L2TPINUDP
const udp_encap_gtp1u = SocketOption(5) // UDP_ENCAP_GTP1U
const udp_encap_gtp0 = SocketOption(4) // UDP_ENCAP_GTP0
const udp_encap_espinudp_non_ike = SocketOption(1) // UDP_ENCAP_ESPINUDP_NON_IKE
const udp_encap_espinudp = SocketOption(2) // UDP_ENCAP_ESPINUDP
const udp_encap = SocketOption(100) // UDP_ENCAP
const udp_cork = SocketOption(1) // UDP_CORK
const tcp_zerocopy_receive = SocketOption(35) // TCP_ZEROCOPY_RECEIVE
const tcp_window_clamp = SocketOption(10) // TCP_WINDOW_CLAMP
const tcp_user_timeout = SocketOption(18) // TCP_USER_TIMEOUT
const tcp_ulp = SocketOption(31) // TCP_ULP
const tcp_tx_delay = SocketOption(37) // TCP_TX_DELAY
const tcp_timestamp = SocketOption(24) // TCP_TIMESTAMP
const tcp_thin_linear_timeouts = SocketOption(16) // TCP_THIN_LINEAR_TIMEOUTS
const tcp_thin_dupack = SocketOption(17) // TCP_THIN_DUPACK
const tcp_s_data_out = SocketOption(8) // TCP_S_DATA_OUT
const tcp_s_data_in = SocketOption(4) // TCP_S_DATA_IN
const tcp_syncnt = SocketOption(7) // TCP_SYNCNT
const tcp_save_syn = SocketOption(27) // TCP_SAVE_SYN
const tcp_saved_syn = SocketOption(28) // TCP_SAVED_SYN
const tcp_repair_window = SocketOption(29) // TCP_REPAIR_WINDOW
const tcp_repair_queue = SocketOption(20) // TCP_REPAIR_QUEUE
const tcp_repair_options = SocketOption(22) // TCP_REPAIR_OPTIONS
const tcp_repair_on = SocketOption(1) // TCP_REPAIR_ON
const tcp_repair_off_no_wp = SocketOption(-1) // TCP_REPAIR_OFF_NO_WP
const tcp_repair_off = SocketOption(0) // TCP_REPAIR_OFF
const tcp_repair = SocketOption(19) // TCP_REPAIR
const tcp_quickack = SocketOption(12) // TCP_QUICKACK
const tcp_queue_seq = SocketOption(21) // TCP_QUEUE_SEQ
const tcp_notsent_lowat = SocketOption(25) // TCP_NOTSENT_LOWAT
const tcp_nodelay = SocketOption(1) // TCP_NODELAY
const tcp_mss_desired = SocketOption(1220) // TCP_MSS_DESIRED
const tcp_mss_default = SocketOption(536) // TCP_MSS_DEFAULT
const tcp_mss = SocketOption(512) // TCP_MSS
const tcp_md5sig_maxkeylen = SocketOption(80) // TCP_MD5SIG_MAXKEYLEN
const tcp_md5sig_flag_prefix = SocketOption(1) // TCP_MD5SIG_FLAG_PREFIX
const tcp_md5sig_flag_ifindex = SocketOption(2) // TCP_MD5SIG_FLAG_IFINDEX
const tcp_md5sig_ext = SocketOption(32) // TCP_MD5SIG_EXT
const tcp_md5sig = SocketOption(14) // TCP_MD5SIG
const tcp_max_winshift = SocketOption(14) // TCP_MAX_WINSHIFT
const tcp_maxwin = SocketOption(65535) // TCP_MAXWIN
const tcp_maxseg = SocketOption(2) // TCP_MAXSEG
const tcp_linger2 = SocketOption(8) // TCP_LINGER2
const tcp_keepintvl = SocketOption(5) // TCP_KEEPINTVL
const tcp_keepidle = SocketOption(4) // TCP_KEEPIDLE
const tcp_keepcnt = SocketOption(6) // TCP_KEEPCNT
const tcp_inq = SocketOption(36) // TCP_INQ
const tcp_info = SocketOption(11) // TCP_INFO
const tcp_fastopen_no_cookie = SocketOption(34) // TCP_FASTOPEN_NO_COOKIE
const tcp_fastopen_key = SocketOption(33) // TCP_FASTOPEN_KEY
const tcp_fastopen_connect = SocketOption(30) // TCP_FASTOPEN_CONNECT
const tcp_fastopen = SocketOption(23) // TCP_FASTOPEN
const tcp_defer_accept = SocketOption(9) // TCP_DEFER_ACCEPT
const tcp_cork = SocketOption(3) // TCP_CORK
const tcp_cookie_transactions = SocketOption(15) // TCP_COOKIE_TRANSACTIONS
const tcp_cookie_pair_size = SocketOption(32) // TCP_COOKIE_PAIR_SIZE
const tcp_cookie_out_never = SocketOption(2) // TCP_COOKIE_OUT_NEVER
const tcp_cookie_min = SocketOption(8) // TCP_COOKIE_MIN
const tcp_cookie_max = SocketOption(16) // TCP_COOKIE_MAX
const tcp_cookie_in_always = SocketOption(1) // TCP_COOKIE_IN_ALWAYS
const tcp_congestion = SocketOption(13) // TCP_CONGESTION
const tcp_cm_inq = SocketOption(36) // TCP_CM_INQ
const tcp_cc_info = SocketOption(26) // TCP_CC_INFO
const tcp_ao_maxkeylen = SocketOption(80) // TCP_AO_MAXKEYLEN
const tcp_ao_keyf_ifindex = SocketOption(1) // TCP_AO_KEYF_IFINDEX
const tcp_ao_keyf_exclude_opt = SocketOption(2) // TCP_AO_KEYF_EXCLUDE_OPT
const so_zerocopy = SocketOption(60) // SO_ZEROCOPY
const so_wifi_status = SocketOption(41) // SO_WIFI_STATUS
const so_type = SocketOption(3) // SO_TYPE
const so_txtime = SocketOption(61) // SO_TXTIME
const so_txrehash = SocketOption(74) // SO_TXREHASH
const so_timestamp_old = SocketOption(29) // SO_TIMESTAMP_OLD
const so_timestamp_new = SocketOption(63) // SO_TIMESTAMP_NEW
const so_timestamp = SocketOption(29) // SO_TIMESTAMP
const so_timestampns_old = SocketOption(35) // SO_TIMESTAMPNS_OLD
const so_timestampns_new = SocketOption(64) // SO_TIMESTAMPNS_NEW
const so_timestampns = SocketOption(35) // SO_TIMESTAMPNS
const so_timestamping_old = SocketOption(37) // SO_TIMESTAMPING_OLD
const so_timestamping_new = SocketOption(65) // SO_TIMESTAMPING_NEW
const so_timestamping = SocketOption(37) // SO_TIMESTAMPING
const so_sndtimeo_old = SocketOption(21) // SO_SNDTIMEO_OLD
const so_sndtimeo_new = SocketOption(67) // SO_SNDTIMEO_NEW
const so_sndtimeo = SocketOption(21) // SO_SNDTIMEO
const so_sndlowat = SocketOption(19) // SO_SNDLOWAT
const so_sndbuf = SocketOption(7) // SO_SNDBUF
const so_sndbufforce = SocketOption(32) // SO_SNDBUFFORCE
const so_select_err_queue = SocketOption(45) // SO_SELECT_ERR_QUEUE
const so_security_encryption_transport = SocketOption(23) // SO_SECURITY_ENCRYPTION_TRANSPORT
const so_security_encryption_network = SocketOption(24) // SO_SECURITY_ENCRYPTION_NETWORK
const so_security_authentication = SocketOption(22) // SO_SECURITY_AUTHENTICATION
const so_rxq_ovfl = SocketOption(40) // SO_RXQ_OVFL
const so_reuseport = SocketOption(15) // SO_REUSEPORT
const so_reuseaddr = SocketOption(2) // SO_REUSEADDR
const so_reserve_mem = SocketOption(73) // SO_RESERVE_MEM
const so_rcvtimeo_old = SocketOption(20) // SO_RCVTIMEO_OLD
const so_rcvtimeo_new = SocketOption(66) // SO_RCVTIMEO_NEW
const so_rcvtimeo = SocketOption(20) // SO_RCVTIMEO
const so_rcvpriority = SocketOption(82) // SO_RCVPRIORITY
const so_rcvmark = SocketOption(75) // SO_RCVMARK
const so_rcvlowat = SocketOption(18) // SO_RCVLOWAT
const so_rcvbuf = SocketOption(8) // SO_RCVBUF
const so_rcvbufforce = SocketOption(33) // SO_RCVBUFFORCE
const so_protocol = SocketOption(38) // SO_PROTOCOL
const so_priority = SocketOption(12) // SO_PRIORITY
const so_prefer_busy_poll = SocketOption(69) // SO_PREFER_BUSY_POLL
const so_peersec = SocketOption(31) // SO_PEERSEC
const so_peerpidfd = SocketOption(77) // SO_PEERPIDFD
const so_peername = SocketOption(28) // SO_PEERNAME
const so_peergroups = SocketOption(59) // SO_PEERGROUPS
const so_peercred = SocketOption(17) // SO_PEERCRED
const so_peek_off = SocketOption(42) // SO_PEEK_OFF
const so_passsec = SocketOption(34) // SO_PASSSEC
const so_passrights = SocketOption(83) // SO_PASSRIGHTS
const so_passpidfd = SocketOption(76) // SO_PASSPIDFD
const so_passcred = SocketOption(16) // SO_PASSCRED
const so_oobinline = SocketOption(10) // SO_OOBINLINE
const so_no_check = SocketOption(11) // SO_NO_CHECK
const so_nofcs = SocketOption(43) // SO_NOFCS
const so_netns_cookie = SocketOption(71) // SO_NETNS_COOKIE
const so_meminfo = SocketOption(55) // SO_MEMINFO
const so_max_pacing_rate = SocketOption(47) // SO_MAX_PACING_RATE
const so_mark = SocketOption(36) // SO_MARK
const so_lock_filter = SocketOption(44) // SO_LOCK_FILTER
const so_linger = SocketOption(13) // SO_LINGER
const so_keepalive = SocketOption(9) // SO_KEEPALIVE
const so_inq = SocketOption(84) // SO_INQ
const so_incoming_napi_id = SocketOption(56) // SO_INCOMING_NAPI_ID
const so_incoming_cpu = SocketOption(49) // SO_INCOMING_CPU
const so_get_filter = SocketOption(26) // SO_GET_FILTER
const so_error = SocketOption(4) // SO_ERROR
const so_dontroute = SocketOption(5) // SO_DONTROUTE
const so_domain = SocketOption(39) // SO_DOMAIN
const so_devmem_linear = SocketOption(78) // SO_DEVMEM_LINEAR
const so_devmem_dontneed = SocketOption(80) // SO_DEVMEM_DONTNEED
const so_devmem_dmabuf = SocketOption(79) // SO_DEVMEM_DMABUF
const so_detach_reuseport_bpf = SocketOption(68) // SO_DETACH_REUSEPORT_BPF
const so_detach_filter = SocketOption(27) // SO_DETACH_FILTER
const so_detach_bpf = SocketOption(27) // SO_DETACH_BPF
const so_debug = SocketOption(1) // SO_DEBUG
const so_cookie = SocketOption(57) // SO_COOKIE
const so_cnx_advice = SocketOption(53) // SO_CNX_ADVICE
const so_busy_poll_budget = SocketOption(70) // SO_BUSY_POLL_BUDGET
const so_busy_poll = SocketOption(46) // SO_BUSY_POLL
const so_buf_lock = SocketOption(72) // SO_BUF_LOCK
const so_bsdcompat = SocketOption(14) // SO_BSDCOMPAT
const so_broadcast = SocketOption(6) // SO_BROADCAST
const so_bpf_extensions = SocketOption(48) // SO_BPF_EXTENSIONS
const so_bindtoifindex = SocketOption(62) // SO_BINDTOIFINDEX
const so_bindtodevice = SocketOption(25) // SO_BINDTODEVICE
const so_attach_reuseport_ebpf = SocketOption(52) // SO_ATTACH_REUSEPORT_EBPF
const so_attach_reuseport_cbpf = SocketOption(51) // SO_ATTACH_REUSEPORT_CBPF
const so_attach_filter = SocketOption(26) // SO_ATTACH_FILTER
const so_attach_bpf = SocketOption(50) // SO_ATTACH_BPF
const so_acceptconn = SocketOption(30) // SO_ACCEPTCONN
const sol_xdp = SocketLevel(283) // SOL_XDP
const sol_x25 = SocketLevel(262) // SOL_X25
const sol_vsock = SocketLevel(287) // SOL_VSOCK
const sol_udp = SocketLevel(17) // SOL_UDP
const sol_tls = SocketLevel(282) // SOL_TLS
const sol_tipc = SocketLevel(271) // SOL_TIPC
const sol_tcp = SocketLevel(6) // SOL_TCP
const sol_socket = SocketLevel(1) // SOL_SOCKET
const sol_smc = SocketLevel(286) // SOL_SMC
const sol_rxrpc = SocketLevel(272) // SOL_RXRPC
const sol_rds = SocketLevel(276) // SOL_RDS
const sol_raw = SocketLevel(255) // SOL_RAW
const sol_pppol2tp = SocketLevel(273) // SOL_PPPOL2TP
const sol_pnpipe = SocketLevel(275) // SOL_PNPIPE
const sol_packet = SocketLevel(263) // SOL_PACKET
const sol_nfc = SocketLevel(280) // SOL_NFC
const sol_netlink = SocketLevel(270) // SOL_NETLINK
const sol_netbeui = SocketLevel(267) // SOL_NETBEUI
const sol_mptcp = SocketLevel(284) // SOL_MPTCP
const sol_mctp = SocketLevel(285) // SOL_MCTP
const sol_llc = SocketLevel(268) // SOL_LLC
const sol_kcm = SocketLevel(281) // SOL_KCM
const sol_iucv = SocketLevel(277) // SOL_IUCV
const sol_irda = SocketLevel(266) // SOL_IRDA
const sol_ip = SocketLevel(0) // SOL_IP
const sol_ipv6 = SocketLevel(41) // SOL_IPV6
const sol_icmpv6 = SocketLevel(58) // SOL_ICMPV6
const sol_decnet = SocketLevel(261) // SOL_DECNET
const sol_dccp = SocketLevel(269) // SOL_DCCP
const sol_caif = SocketLevel(278) // SOL_CAIF
const sol_bluetooth = SocketLevel(274) // SOL_BLUETOOTH
const sol_atm = SocketLevel(264) // SOL_ATM
const sol_alg = SocketLevel(279) // SOL_ALG
const sol_aal = SocketLevel(265) // SOL_AAL
const sock_stream = SocketType(1) // SOCK_STREAM
const sock_seqpacket = SocketType(5) // SOCK_SEQPACKET
const sock_rdm = SocketType(4) // SOCK_RDM
const sock_raw = SocketType(3) // SOCK_RAW
const sock_packet = SocketType(10) // SOCK_PACKET
const sock_nonblock = SocketType(2048) // SOCK_NONBLOCK
const sock_dgram = SocketType(2) // SOCK_DGRAM
const sock_dccp = SocketType(6) // SOCK_DCCP
const sock_cloexec = SocketType(524288) // SOCK_CLOEXEC
const ni_numericserv = NameInfoFlag(2) // NI_NUMERICSERV
const ni_numerichost = NameInfoFlag(1) // NI_NUMERICHOST
const ni_nofqdn = NameInfoFlag(4) // NI_NOFQDN
const ni_namereqd = NameInfoFlag(8) // NI_NAMEREQD
const ni_maxserv = NameInfoFlag(32) // NI_MAXSERV
const ni_maxhost = NameInfoFlag(1025) // NI_MAXHOST
const ni_dgram = NameInfoFlag(16) // NI_DGRAM
const msg_zerocopy = MsgFlag(67108864) // MSG_ZEROCOPY
const msg_waitforone = MsgFlag(65536) // MSG_WAITFORONE
const msg_waitall = MsgFlag(256) // MSG_WAITALL
const msg_trunc = MsgFlag(32) // MSG_TRUNC
const msg_syn = MsgFlag(1024) // MSG_SYN
const msg_sock_devmem = MsgFlag(33554432) // MSG_SOCK_DEVMEM
const msg_rst = MsgFlag(4096) // MSG_RST
const msg_proxy = MsgFlag(16) // MSG_PROXY
const msg_peek = MsgFlag(2) // MSG_PEEK
const msg_oob = MsgFlag(1) // MSG_OOB
const msg_nosignal = MsgFlag(16384) // MSG_NOSIGNAL
const msg_more = MsgFlag(32768) // MSG_MORE
const msg_fin = MsgFlag(512) // MSG_FIN
const msg_fastopen = MsgFlag(536870912) // MSG_FASTOPEN
const msg_errqueue = MsgFlag(8192) // MSG_ERRQUEUE
const msg_eor = MsgFlag(128) // MSG_EOR
const msg_dontwait = MsgFlag(64) // MSG_DONTWAIT
const msg_dontroute = MsgFlag(4) // MSG_DONTROUTE
const msg_ctrunc = MsgFlag(8) // MSG_CTRUNC
const msg_confirm = MsgFlag(2048) // MSG_CONFIRM
const msg_cmsg_cloexec = MsgFlag(1073741824) // MSG_CMSG_CLOEXEC
const msg_batch = MsgFlag(262144) // MSG_BATCH
const ip_xfrm_policy = SocketOption(17) // IP_XFRM_POLICY
const ip_unicast_if = SocketOption(50) // IP_UNICAST_IF
const ip_unblock_source = SocketOption(37) // IP_UNBLOCK_SOURCE
const ip_ttl = SocketOption(2) // IP_TTL
const ip_transparent = SocketOption(19) // IP_TRANSPARENT
const ip_tos = SocketOption(1) // IP_TOS
const ip_router_alert = SocketOption(5) // IP_ROUTER_ALERT
const ip_retopts = SocketOption(7) // IP_RETOPTS
const ip_recvttl = SocketOption(12) // IP_RECVTTL
const ip_recvtos = SocketOption(13) // IP_RECVTOS
const ip_recvretopts = SocketOption(7) // IP_RECVRETOPTS
const ip_recvorigdstaddr = SocketOption(20) // IP_RECVORIGDSTADDR
const ip_recvopts = SocketOption(6) // IP_RECVOPTS
const ip_recvfragsize = SocketOption(25) // IP_RECVFRAGSIZE
const ip_recverr_rfc4884 = SocketOption(26) // IP_RECVERR_RFC4884
const ip_recverr = SocketOption(11) // IP_RECVERR
const ip_protocol = SocketOption(52) // IP_PROTOCOL
const ip_pmtudisc_want = SocketOption(1) // IP_PMTUDISC_WANT
const ip_pmtudisc_probe = SocketOption(3) // IP_PMTUDISC_PROBE
const ip_pmtudisc_omit = SocketOption(5) // IP_PMTUDISC_OMIT
const ip_pmtudisc_interface = SocketOption(4) // IP_PMTUDISC_INTERFACE
const ip_pmtudisc_do = SocketOption(2) // IP_PMTUDISC_DO
const ip_pmtudisc_dont = SocketOption(0) // IP_PMTUDISC_DONT
const ip_pmtudisc = SocketOption(10) // IP_PMTUDISC
const ip_pktoptions = SocketOption(9) // IP_PKTOPTIONS
const ip_pktinfo = SocketOption(8) // IP_PKTINFO
const ip_passsec = SocketOption(18) // IP_PASSSEC
const ip_origdstaddr = SocketOption(20) // IP_ORIGDSTADDR
const ip_options = SocketOption(4) // IP_OPTIONS
const ip_nodefrag = SocketOption(22) // IP_NODEFRAG
const ip_multicast_ttl = SocketOption(33) // IP_MULTICAST_TTL
const ip_multicast_loop = SocketOption(34) // IP_MULTICAST_LOOP
const ip_multicast_if = SocketOption(32) // IP_MULTICAST_IF
const ip_multicast_all = SocketOption(49) // IP_MULTICAST_ALL
const ip_mtu_discover = SocketOption(10) // IP_MTU_DISCOVER
const ip_mtu = SocketOption(14) // IP_MTU
const ip_msfilter = SocketOption(41) // IP_MSFILTER
const ip_minttl = SocketOption(21) // IP_MINTTL
const ip_max_memberships = SocketOption(20) // IP_MAX_MEMBERSHIPS
const ip_local_port_range = SocketOption(51) // IP_LOCAL_PORT_RANGE
const ip_ipsec_policy = SocketOption(16) // IP_IPSEC_POLICY
const ip_hdrincl = SocketOption(3) // IP_HDRINCL
const ip_freebind = SocketOption(15) // IP_FREEBIND
const ip_drop_source_membership = SocketOption(40) // IP_DROP_SOURCE_MEMBERSHIP
const ip_drop_membership = SocketOption(36) // IP_DROP_MEMBERSHIP
const ip_default_multicast_ttl = SocketOption(1) // IP_DEFAULT_MULTICAST_TTL
const ip_default_multicast_loop = SocketOption(1) // IP_DEFAULT_MULTICAST_LOOP
const ip_checksum = SocketOption(23) // IP_CHECKSUM
const ip_block_source = SocketOption(38) // IP_BLOCK_SOURCE
const ip_bind_address_no_port = SocketOption(24) // IP_BIND_ADDRESS_NO_PORT
const ip_add_source_membership = SocketOption(39) // IP_ADD_SOURCE_MEMBERSHIP
const ip_add_membership = SocketOption(35) // IP_ADD_MEMBERSHIP
const ipv6_xfrm_policy = SocketOption(35) // IPV6_XFRM_POLICY
const ipv6_v6only = SocketOption(26) // IPV6_V6ONLY
const ipv6_unicast_if = SocketOption(76) // IPV6_UNICAST_IF
const ipv6_unicast_hops = SocketOption(16) // IPV6_UNICAST_HOPS
const ipv6_transparent = SocketOption(75) // IPV6_TRANSPARENT
const ipv6_tclass = SocketOption(67) // IPV6_TCLASS
const ipv6_rxhopopts = SocketOption(54) // IPV6_RXHOPOPTS
const ipv6_rxdstopts = SocketOption(59) // IPV6_RXDSTOPTS
const ipv6_rthdr_type_0 = SocketOption(0) // IPV6_RTHDR_TYPE_0
const ipv6_rthdr_strict = SocketOption(1) // IPV6_RTHDR_STRICT
const ipv6_rthdr_loose = SocketOption(0) // IPV6_RTHDR_LOOSE
const ipv6_rthdr = SocketOption(57) // IPV6_RTHDR
const ipv6_rthdrdstopts = SocketOption(55) // IPV6_RTHDRDSTOPTS
const ipv6_router_alert_isolate = SocketOption(30) // IPV6_ROUTER_ALERT_ISOLATE
const ipv6_router_alert = SocketOption(22) // IPV6_ROUTER_ALERT
const ipv6_recvtclass = SocketOption(66) // IPV6_RECVTCLASS
const ipv6_recvrthdr = SocketOption(56) // IPV6_RECVRTHDR
const ipv6_recvpktinfo = SocketOption(49) // IPV6_RECVPKTINFO
const ipv6_recvpathmtu = SocketOption(60) // IPV6_RECVPATHMTU
const ipv6_recvorigdstaddr = SocketOption(74) // IPV6_RECVORIGDSTADDR
const ipv6_recvhopopts = SocketOption(53) // IPV6_RECVHOPOPTS
const ipv6_recvhoplimit = SocketOption(51) // IPV6_RECVHOPLIMIT
const ipv6_recvfragsize = SocketOption(77) // IPV6_RECVFRAGSIZE
const ipv6_recverr_rfc4884 = SocketOption(31) // IPV6_RECVERR_RFC4884
const ipv6_recverr = SocketOption(25) // IPV6_RECVERR
const ipv6_recvdstopts = SocketOption(58) // IPV6_RECVDSTOPTS
const ipv6_pmtudisc_want = SocketOption(1) // IPV6_PMTUDISC_WANT
const ipv6_pmtudisc_probe = SocketOption(3) // IPV6_PMTUDISC_PROBE
const ipv6_pmtudisc_omit = SocketOption(5) // IPV6_PMTUDISC_OMIT
const ipv6_pmtudisc_interface = SocketOption(4) // IPV6_PMTUDISC_INTERFACE
const ipv6_pmtudisc_do = SocketOption(2) // IPV6_PMTUDISC_DO
const ipv6_pmtudisc_dont = SocketOption(0) // IPV6_PMTUDISC_DONT
const ipv6_pktinfo = SocketOption(50) // IPV6_PKTINFO
const ipv6_pathmtu = SocketOption(61) // IPV6_PATHMTU
const ipv6_origdstaddr = SocketOption(74) // IPV6_ORIGDSTADDR
const ipv6_nexthop = SocketOption(9) // IPV6_NEXTHOP
const ipv6_multicast_loop = SocketOption(19) // IPV6_MULTICAST_LOOP
const ipv6_multicast_if = SocketOption(17) // IPV6_MULTICAST_IF
const ipv6_multicast_hops = SocketOption(18) // IPV6_MULTICAST_HOPS
const ipv6_multicast_all = SocketOption(29) // IPV6_MULTICAST_ALL
const ipv6_mtu_discover = SocketOption(23) // IPV6_MTU_DISCOVER
const ipv6_mtu = SocketOption(24) // IPV6_MTU
const ipv6_minhopcount = SocketOption(73) // IPV6_MINHOPCOUNT
const ipv6_leave_group = SocketOption(21) // IPV6_LEAVE_GROUP
const ipv6_leave_anycast = SocketOption(28) // IPV6_LEAVE_ANYCAST
const ipv6_join_group = SocketOption(20) // IPV6_JOIN_GROUP
const ipv6_join_anycast = SocketOption(27) // IPV6_JOIN_ANYCAST
const ipv6_ipsec_policy = SocketOption(34) // IPV6_IPSEC_POLICY
const ipv6_hopopts = SocketOption(54) // IPV6_HOPOPTS
const ipv6_hoplimit = SocketOption(52) // IPV6_HOPLIMIT
const ipv6_hdrincl = SocketOption(36) // IPV6_HDRINCL
const ipv6_freebind = SocketOption(78) // IPV6_FREEBIND
const ipv6_dstopts = SocketOption(59) // IPV6_DSTOPTS
const ipv6_drop_membership = SocketOption(21) // IPV6_DROP_MEMBERSHIP
const ipv6_dontfrag = SocketOption(62) // IPV6_DONTFRAG
const ipv6_checksum = SocketOption(7) // IPV6_CHECKSUM
const ipv6_autoflowlabel = SocketOption(70) // IPV6_AUTOFLOWLABEL
const ipv6_authhdr = SocketOption(10) // IPV6_AUTHHDR
const ipv6_add_membership = SocketOption(20) // IPV6_ADD_MEMBERSHIP
const ipv6_addr_preferences = SocketOption(72) // IPV6_ADDR_PREFERENCES
const ipv6_addrform = SocketOption(1) // IPV6_ADDRFORM
const ipv6_2292rthdr = SocketOption(5) // IPV6_2292RTHDR
const ipv6_2292pktoptions = SocketOption(6) // IPV6_2292PKTOPTIONS
const ipv6_2292pktinfo = SocketOption(2) // IPV6_2292PKTINFO
const ipv6_2292hopopts = SocketOption(3) // IPV6_2292HOPOPTS
const ipv6_2292hoplimit = SocketOption(8) // IPV6_2292HOPLIMIT
const ipv6_2292dstopts = SocketOption(4) // IPV6_2292DSTOPTS
const ipproto_udp = SocketLevel(17) // IPPROTO_UDP
const ipproto_udplite = SocketLevel(136) // IPPROTO_UDPLITE
const ipproto_tp = SocketLevel(29) // IPPROTO_TP
const ipproto_tcp = SocketLevel(6) // IPPROTO_TCP
const ipproto_smc = SocketLevel(256) // IPPROTO_SMC
const ipproto_sctp = SocketLevel(132) // IPPROTO_SCTP
const ipproto_rsvp = SocketLevel(46) // IPPROTO_RSVP
const ipproto_routing = SocketLevel(43) // IPPROTO_ROUTING
const ipproto_raw = SocketLevel(255) // IPPROTO_RAW
const ipproto_pup = SocketLevel(12) // IPPROTO_PUP
const ipproto_pim = SocketLevel(103) // IPPROTO_PIM
const ipproto_none = SocketLevel(59) // IPPROTO_NONE
const ipproto_mtp = SocketLevel(92) // IPPROTO_MTP
const ipproto_mptcp = SocketLevel(262) // IPPROTO_MPTCP
const ipproto_mpls = SocketLevel(137) // IPPROTO_MPLS
const ipproto_mh = SocketLevel(135) // IPPROTO_MH
const ipproto_l2tp = SocketLevel(115) // IPPROTO_L2TP
const ipproto_ip = SocketLevel(0) // IPPROTO_IP
const ipproto_ipv6 = SocketLevel(41) // IPPROTO_IPV6
const ipproto_ipip = SocketLevel(4) // IPPROTO_IPIP
const ipproto_igmp = SocketLevel(2) // IPPROTO_IGMP
const ipproto_idp = SocketLevel(22) // IPPROTO_IDP
const ipproto_icmp = SocketLevel(1) // IPPROTO_ICMP
const ipproto_icmpv6 = SocketLevel(58) // IPPROTO_ICMPV6
const ipproto_hopopts = SocketLevel(0) // IPPROTO_HOPOPTS
const ipproto_gre = SocketLevel(47) // IPPROTO_GRE
const ipproto_fragment = SocketLevel(44) // IPPROTO_FRAGMENT
const ipproto_ethernet = SocketLevel(143) // IPPROTO_ETHERNET
const ipproto_esp = SocketLevel(50) // IPPROTO_ESP
const ipproto_encap = SocketLevel(98) // IPPROTO_ENCAP
const ipproto_egp = SocketLevel(8) // IPPROTO_EGP
const ipproto_dstopts = SocketLevel(60) // IPPROTO_DSTOPTS
const ipproto_dccp = SocketLevel(33) // IPPROTO_DCCP
const ipproto_comp = SocketLevel(108) // IPPROTO_COMP
const ipproto_beetph = SocketLevel(94) // IPPROTO_BEETPH
const ipproto_ah = SocketLevel(51) // IPPROTO_AH
const ai_v4mapped = AddrInfoFlag(8) // AI_V4MAPPED
const ai_passive = AddrInfoFlag(1) // AI_PASSIVE
const ai_numericserv = AddrInfoFlag(1024) // AI_NUMERICSERV
const ai_numerichost = AddrInfoFlag(4) // AI_NUMERICHOST
const ai_canonname = AddrInfoFlag(2) // AI_CANONNAME
const ai_all = AddrInfoFlag(16) // AI_ALL
const ai_addrconfig = AddrInfoFlag(32) // AI_ADDRCONFIG
const af_xdp = AddrFamily(44) // AF_XDP
const af_x25 = AddrFamily(9) // AF_X25
const af_wanpipe = AddrFamily(25) // AF_WANPIPE
const af_vsock = AddrFamily(40) // AF_VSOCK
const af_unspec = AddrFamily(0) // AF_UNSPEC
const af_unix = AddrFamily(1) // AF_UNIX
const af_tipc = AddrFamily(30) // AF_TIPC
const af_sna = AddrFamily(22) // AF_SNA
const af_smc = AddrFamily(43) // AF_SMC
const af_security = AddrFamily(14) // AF_SECURITY
const af_rxrpc = AddrFamily(33) // AF_RXRPC
const af_route = AddrFamily(16) // AF_ROUTE
const af_rose = AddrFamily(11) // AF_ROSE
const af_rds = AddrFamily(21) // AF_RDS
const af_qipcrtr = AddrFamily(42) // AF_QIPCRTR
const af_pppox = AddrFamily(24) // AF_PPPOX
const af_phonet = AddrFamily(35) // AF_PHONET
const af_packet = AddrFamily(17) // AF_PACKET
const af_nfc = AddrFamily(39) // AF_NFC
const af_netrom = AddrFamily(6) // AF_NETROM
const af_netlink = AddrFamily(16) // AF_NETLINK
const af_netbeui = AddrFamily(13) // AF_NETBEUI
const af_mpls = AddrFamily(28) // AF_MPLS
const af_mctp = AddrFamily(45) // AF_MCTP
const af_max = AddrFamily(46) // AF_MAX
const af_local = AddrFamily(1) // AF_LOCAL
const af_llc = AddrFamily(26) // AF_LLC
const af_key = AddrFamily(15) // AF_KEY
const af_kcm = AddrFamily(41) // AF_KCM
const af_iucv = AddrFamily(32) // AF_IUCV
const af_isdn = AddrFamily(34) // AF_ISDN
const af_irda = AddrFamily(23) // AF_IRDA
const af_ipx = AddrFamily(4) // AF_IPX
const af_inet = AddrFamily(2) // AF_INET
const af_inet6 = AddrFamily(10) // AF_INET6
const af_ieee802154 = AddrFamily(36) // AF_IEEE802154
const af_ib = AddrFamily(27) // AF_IB
const af_file = AddrFamily(1) // AF_FILE
const af_econet = AddrFamily(19) // AF_ECONET
const af_decnet = AddrFamily(12) // AF_DECNET
const af_can = AddrFamily(29) // AF_CAN
const af_caif = AddrFamily(37) // AF_CAIF
const af_bridge = AddrFamily(7) // AF_BRIDGE
const af_bluetooth = AddrFamily(31) // AF_BLUETOOTH
const af_ax25 = AddrFamily(3) // AF_AX25
const af_atmsvc = AddrFamily(20) // AF_ATMSVC
const af_atmpvc = AddrFamily(8) // AF_ATMPVC
const af_ash = AddrFamily(18) // AF_ASH
const af_appletalk = AddrFamily(5) // AF_APPLETALK
const af_alg = AddrFamily(38) // AF_ALG
const udp_vendor = SocketOption(2147483648) // UDP_VENDOR
const udp_encap_espinudp_port = SocketOption(500) // UDP_ENCAP_ESPINUDP_PORT
const udp_encap_espinudp_non_ike = SocketOption(1) // UDP_ENCAP_ESPINUDP_NON_IKE
const udp_encap_espinudp_maxfraglen = SocketOption(552) // UDP_ENCAP_ESPINUDP_MAXFRAGLEN
const udp_encap_espinudp = SocketOption(2) // UDP_ENCAP_ESPINUDP
const udp_encap = SocketOption(1) // UDP_ENCAP
const tcp_vendor = SocketOption(2147483648) // TCP_VENDOR
const tcp_use_cmp_acks = SocketOption(77) // TCP_USE_CMP_ACKS
const tcp_user_log = SocketOption(48) // TCP_USER_LOG
const tcp_txtls_mode = SocketOption(40) // TCP_TXTLS_MODE
const tcp_txtls_enable = SocketOption(39) // TCP_TXTLS_ENABLE
const tcp_tls_mode_toe = SocketOption(3) // TCP_TLS_MODE_TOE
const tcp_tls_mode_sw = SocketOption(1) // TCP_TLS_MODE_SW
const tcp_tls_mode_none = SocketOption(0) // TCP_TLS_MODE_NONE
const tcp_tls_mode_ifnet = SocketOption(2) // TCP_TLS_MODE_IFNET
const tcp_timely_dyn_adj = SocketOption(1125) // TCP_TIMELY_DYN_ADJ
const tcp_stats = SocketOption(33) // TCP_STATS
const tcp_stack_spec_info = SocketOption(1160) // TCP_STACK_SPEC_INFO
const tcp_ss_eexit = SocketOption(1152) // TCP_SS_EEXIT
const tcp_sidechan_dis = SocketOption(1157) // TCP_SIDECHAN_DIS
const tcp_shared_cwnd_time_limit = SocketOption(1128) // TCP_SHARED_CWND_TIME_LIMIT
const tcp_shared_cwnd_enable = SocketOption(1124) // TCP_SHARED_CWND_ENABLE
const tcp_shared_cwnd_allowed = SocketOption(75) // TCP_SHARED_CWND_ALLOWED
const tcp_rxtls_mode = SocketOption(42) // TCP_RXTLS_MODE
const tcp_rxtls_enable = SocketOption(41) // TCP_RXTLS_ENABLE
const tcp_reusport_lb_numa_nodom = SocketOption(-2) // TCP_REUSPORT_LB_NUMA_NODOM
const tcp_reusport_lb_numa_curdom = SocketOption(-1) // TCP_REUSPORT_LB_NUMA_CURDOM
const tcp_reusport_lb_numa = SocketOption(1026) // TCP_REUSPORT_LB_NUMA
const tcp_remote_udp_encaps_port = SocketOption(71) // TCP_REMOTE_UDP_ENCAPS_PORT
const tcp_rec_is_dyn = SocketOption(1156) // TCP_REC_IS_DYN
const tcp_rec_abc_val = SocketOption(1134) // TCP_REC_ABC_VAL
const tcp_rack_tlp_use = SocketOption(1095) // TCP_RACK_TLP_USE
const tcp_rack_tlp_thresh = SocketOption(1063) // TCP_RACK_TLP_THRESH
const tcp_rack_tlp_reduce = SocketOption(1052) // TCP_RACK_TLP_REDUCE
const tcp_rack_timer_slop = SocketOption(1140) // TCP_RACK_TIMER_SLOP
const tcp_rack_split_limit = SocketOption(1145) // TCP_RACK_SPLIT_LIMIT
const tcp_rack_set_rxt_options = SocketOption(1143) // TCP_RACK_SET_RXT_OPTIONS
const tcp_rack_rr_conf = SocketOption(1113) // TCP_RACK_RR_CONF
const tcp_rack_reord_thresh = SocketOption(1061) // TCP_RACK_REORD_THRESH
const tcp_rack_reord_fade = SocketOption(1062) // TCP_RACK_REORD_FADE
const tcp_rack_prr_sendalot = SocketOption(1057) // TCP_RACK_PRR_SENDALOT
const tcp_rack_profile = SocketOption(1129) // TCP_RACK_PROFILE
const tcp_rack_pkt_delay = SocketOption(1064) // TCP_RACK_PKT_DELAY
const tcp_rack_pacing_divisor = SocketOption(1146) // TCP_RACK_PACING_DIVISOR
const tcp_rack_pacing_beta_ecn = SocketOption(1139) // TCP_RACK_PACING_BETA_ECN
const tcp_rack_pacing_beta = SocketOption(1138) // TCP_RACK_PACING_BETA
const tcp_rack_pace_to_fill = SocketOption(1127) // TCP_RACK_PACE_TO_FILL
const tcp_rack_pace_rate_ss = SocketOption(1119) // TCP_RACK_PACE_RATE_SS
const tcp_rack_pace_rate_rec = SocketOption(1120) // TCP_RACK_PACE_RATE_REC
const tcp_rack_pace_rate_ca = SocketOption(1118) // TCP_RACK_PACE_RATE_CA
const tcp_rack_pace_min_seg = SocketOption(1147) // TCP_RACK_PACE_MIN_SEG
const tcp_rack_pace_max_seg = SocketOption(1054) // TCP_RACK_PACE_MAX_SEG
const tcp_rack_pace_always = SocketOption(1055) // TCP_RACK_PACE_ALWAYS
const tcp_rack_no_push_at_max = SocketOption(1126) // TCP_RACK_NO_PUSH_AT_MAX
const tcp_rack_nonrxt_cfg_rate = SocketOption(1123) // TCP_RACK_NONRXT_CFG_RATE
const tcp_rack_min_to = SocketOption(1058) // TCP_RACK_MIN_TO
const tcp_rack_measure_cnt = SocketOption(1135) // TCP_RACK_MEASURE_CNT
const tcp_rack_mbuf_queue = SocketOption(1050) // TCP_RACK_MBUF_QUEUE
const tcp_rack_hi_beta = SocketOption(1144) // TCP_RACK_HI_BETA
const tcp_rack_gp_increase_ss = SocketOption(1115) // TCP_RACK_GP_INCREASE_SS
const tcp_rack_gp_increase_rec = SocketOption(1116) // TCP_RACK_GP_INCREASE_REC
const tcp_rack_gp_increase_ca = SocketOption(1114) // TCP_RACK_GP_INCREASE_CA
const tcp_rack_force_mseg = SocketOption(1117) // TCP_RACK_FORCE_MSEG
const tcp_rack_enable_hystart = SocketOption(1142) // TCP_RACK_ENABLE_HYSTART
const tcp_rack_early_seg = SocketOption(1060) // TCP_RACK_EARLY_SEG
const tcp_rack_dsack_opt = SocketOption(1141) // TCP_RACK_DSACK_OPT
const tcp_rack_do_detection = SocketOption(1097) // TCP_RACK_DO_DETECTION
const tcp_rack_dgp_in_rec = SocketOption(1148) // TCP_RACK_DGP_IN_REC
const tcp_rack_abc_val = SocketOption(1133) // TCP_RACK_ABC_VAL
const tcp_proc_accounting = SocketOption(76) // TCP_PROC_ACCOUNTING
const tcp_perf_info = SocketOption(78) // TCP_PERF_INFO
const tcp_pacing_rate_cap = SocketOption(1131) // TCP_PACING_RATE_CAP
const tcp_pacing_dnd = SocketOption(1151) // TCP_PACING_DND
const tcp_num_proc_counters = SocketOption(11) // TCP_NUM_PROC_COUNTERS
const tcp_num_cnt_counters = SocketOption(13) // TCP_NUM_CNT_COUNTERS
const tcp_no_timely = SocketOption(1154) // TCP_NO_TIMELY
const tcp_no_prr = SocketOption(1122) // TCP_NO_PRR
const tcp_nopush = SocketOption(4) // TCP_NOPUSH
const tcp_noopt = SocketOption(8) // TCP_NOOPT
const tcp_nodelay = SocketOption(1) // TCP_NODELAY
const tcp_mss = SocketOption(536) // TCP_MSS
const tcp_minmss = SocketOption(216) // TCP_MINMSS
const tcp_md5sig = SocketOption(16) // TCP_MD5SIG
const tcp_max_winshift = SocketOption(14) // TCP_MAX_WINSHIFT
const tcp_max_sack = SocketOption(4) // TCP_MAX_SACK
const tcp_maxwin = SocketOption(65535) // TCP_MAXWIN
const tcp_maxunacktime = SocketOption(68) // TCP_MAXUNACKTIME
const tcp_maxseg = SocketOption(2) // TCP_MAXSEG
const tcp_maxolen = SocketOption(40) // TCP_MAXOLEN
const tcp_maxhlen = SocketOption(60) // TCP_MAXHLEN
const tcp_log_user_httpd = SocketOption(1) // TCP_LOG_USER_HTTPD
const tcp_log_tag = SocketOption(47) // TCP_LOG_TAG
const tcp_log_limit = SocketOption(74) // TCP_LOG_LIMIT
const tcp_log_id_len = SocketOption(64) // TCP_LOG_ID_LEN
const tcp_log_httpd_ts_req = SocketOption(2) // TCP_LOG_HTTPD_TS_REQ
const tcp_log_httpd_ts = SocketOption(1) // TCP_LOG_HTTPD_TS
const tcp_log_httpd_range_start = SocketOption(1) // TCP_LOG_HTTPD_RANGE_START
const tcp_log_httpd_range_end = SocketOption(2) // TCP_LOG_HTTPD_RANGE_END
const tcp_log = SocketOption(34) // TCP_LOG
const tcp_logid_cnt = SocketOption(46) // TCP_LOGID_CNT
const tcp_logid = SocketOption(36) // TCP_LOGID
const tcp_logdump = SocketOption(37) // TCP_LOGDUMP
const tcp_logdumpid = SocketOption(38) // TCP_LOGDUMPID
const tcp_logbuf = SocketOption(35) // TCP_LOGBUF
const tcp_keepintvl = SocketOption(512) // TCP_KEEPINTVL
const tcp_keepinit = SocketOption(128) // TCP_KEEPINIT
const tcp_keepidle = SocketOption(256) // TCP_KEEPIDLE
const tcp_keepcnt = SocketOption(1024) // TCP_KEEPCNT
const tcp_iwnd_nseg = SocketOption(44) // TCP_IWND_NSEG
const tcp_iwnd_nb = SocketOption(43) // TCP_IWND_NB
const tcp_info = SocketOption(32) // TCP_INFO
const tcp_idle_reduce = SocketOption(70) // TCP_IDLE_REDUCE
const tcp_hybrid_pacing_wasset = SocketOption(8192) // TCP_HYBRID_PACING_WASSET
const tcp_hybrid_pacing_user_mask = SocketOption(4095) // TCP_HYBRID_PACING_USER_MASK
const tcp_hybrid_pacing_s_mss = SocketOption(32) // TCP_HYBRID_PACING_S_MSS
const tcp_hybrid_pacing_setmss = SocketOption(4096) // TCP_HYBRID_PACING_SETMSS
const tcp_hybrid_pacing_sendtime = SocketOption(16384) // TCP_HYBRID_PACING_SENDTIME
const tcp_hybrid_pacing_h_ms = SocketOption(8) // TCP_HYBRID_PACING_H_MS
const tcp_hybrid_pacing_enable = SocketOption(16) // TCP_HYBRID_PACING_ENABLE
const tcp_hybrid_pacing_dtl = SocketOption(2) // TCP_HYBRID_PACING_DTL
const tcp_hybrid_pacing_cu = SocketOption(1) // TCP_HYBRID_PACING_CU
const tcp_hybrid_pacing_cspr = SocketOption(4) // TCP_HYBRID_PACING_CSPR
const tcp_hybrid_pacing = SocketOption(1150) // TCP_HYBRID_PACING
const tcp_honor_hpts_min = SocketOption(1155) // TCP_HONOR_HPTS_MIN
const tcp_hdwr_up_only = SocketOption(1132) // TCP_HDWR_UP_ONLY
const tcp_hdwr_rate_cap = SocketOption(1130) // TCP_HDWR_RATE_CAP
const tcp_gp_use_ltbw = SocketOption(1162) // TCP_GP_USE_LTBW
const tcp_function_name_len_max = SocketOption(32) // TCP_FUNCTION_NAME_LEN_MAX
const tcp_function_blk = SocketOption(8192) // TCP_FUNCTION_BLK
const tcp_function_alias = SocketOption(8193) // TCP_FUNCTION_ALIAS
const tcp_fin_is_rst = SocketOption(73) // TCP_FIN_IS_RST
const tcp_fillcw_rate_cap = SocketOption(1158) // TCP_FILLCW_RATE_CAP
const tcp_fastopen_psk_len = SocketOption(16) // TCP_FASTOPEN_PSK_LEN
const tcp_fastopen_min_cookie_len = SocketOption(4) // TCP_FASTOPEN_MIN_COOKIE_LEN
const tcp_fastopen_max_cookie_len = SocketOption(16) // TCP_FASTOPEN_MAX_COOKIE_LEN
const tcp_fastopen = SocketOption(1025) // TCP_FASTOPEN
const tcp_dgp_upper_bounds = SocketOption(1153) // TCP_DGP_UPPER_BOUNDS
const tcp_delack = SocketOption(72) // TCP_DELACK
const tcp_defer_options = SocketOption(1136) // TCP_DEFER_OPTIONS
const tcp_data_after_close = SocketOption(1100) // TCP_DATA_AFTER_CLOSE
const tcp_congestion = SocketOption(64) // TCP_CONGESTION
const tcp_ccalgoopt = SocketOption(65) // TCP_CCALGOOPT
const tcp_ca_name_max = SocketOption(16) // TCP_CA_NAME_MAX
const tcp_bbr_utter_max_tso = SocketOption(1106) // TCP_BBR_UTTER_MAX_TSO
const tcp_bbr_use_rack_rr = SocketOption(1104) // TCP_BBR_USE_RACK_RR
const tcp_bbr_use_rack_cheat = SocketOption(1104) // TCP_BBR_USE_RACK_CHEAT
const tcp_bbr_usedel_rate = SocketOption(1079) // TCP_BBR_USEDEL_RATE
const tcp_bbr_tstmp_raises = SocketOption(1110) // TCP_BBR_TSTMP_RAISES
const tcp_bbr_tslimits = SocketOption(1076) // TCP_BBR_TSLIMITS
const tcp_bbr_tmr_pace_oh = SocketOption(1096) // TCP_BBR_TMR_PACE_OH
const tcp_bbr_startup_pg = SocketOption(1069) // TCP_BBR_STARTUP_PG
const tcp_bbr_startup_loss_exit = SocketOption(1074) // TCP_BBR_STARTUP_LOSS_EXIT
const tcp_bbr_send_iwnd_in_tso = SocketOption(1103) // TCP_BBR_SEND_IWND_IN_TSO
const tcp_bbr_retran_wtso = SocketOption(1099) // TCP_BBR_RETRAN_WTSO
const tcp_bbr_rack_rtt_use = SocketOption(1098) // TCP_BBR_RACK_RTT_USE
const tcp_bbr_rack_init_rate = SocketOption(1112) // TCP_BBR_RACK_INIT_RATE
const tcp_bbr_probe_rtt_len = SocketOption(1102) // TCP_BBR_PROBE_RTT_LEN
const tcp_bbr_probe_rtt_int = SocketOption(1072) // TCP_BBR_PROBE_RTT_INT
const tcp_bbr_probe_rtt_gain = SocketOption(1101) // TCP_BBR_PROBE_RTT_GAIN
const tcp_bbr_policer_detect = SocketOption(1111) // TCP_BBR_POLICER_DETECT
const tcp_bbr_pace_seg_min = SocketOption(1089) // TCP_BBR_PACE_SEG_MIN
const tcp_bbr_pace_seg_max = SocketOption(1088) // TCP_BBR_PACE_SEG_MAX
const tcp_bbr_pace_per_sec = SocketOption(1086) // TCP_BBR_PACE_PER_SEC
const tcp_bbr_pace_oh = SocketOption(1077) // TCP_BBR_PACE_OH
const tcp_bbr_pace_del_tar = SocketOption(1087) // TCP_BBR_PACE_DEL_TAR
const tcp_bbr_pace_cross = SocketOption(1090) // TCP_BBR_PACE_CROSS
const tcp_bbr_min_topaceout = SocketOption(1109) // TCP_BBR_MIN_TOPACEOUT
const tcp_bbr_min_rto = SocketOption(1080) // TCP_BBR_MIN_RTO
const tcp_bbr_max_rto = SocketOption(1081) // TCP_BBR_MAX_RTO
const tcp_bbr_iwintso = SocketOption(1067) // TCP_BBR_IWINTSO
const tcp_bbr_hdwr_pace = SocketOption(1105) // TCP_BBR_HDWR_PACE
const tcp_bbr_floor_min_tso = SocketOption(1108) // TCP_BBR_FLOOR_MIN_TSO
const tcp_bbr_extra_state = SocketOption(1107) // TCP_BBR_EXTRA_STATE
const tcp_bbr_drain_pg = SocketOption(1070) // TCP_BBR_DRAIN_PG
const tcp_bbr_algorithm = SocketOption(1083) // TCP_BBR_ALGORITHM
const so_vendor = SocketOption(2147483648) // SO_VENDOR
const so_user_cookie = SocketOption(4117) // SO_USER_COOKIE
const so_useloopback = SocketOption(64) // SO_USELOOPBACK
const so_type = SocketOption(4104) // SO_TYPE
const so_ts_realtime_micro = SocketOption(0) // SO_TS_REALTIME_MICRO
const so_ts_realtime = SocketOption(2) // SO_TS_REALTIME
const so_ts_monotonic = SocketOption(3) // SO_TS_MONOTONIC
const so_ts_default = SocketOption(0) // SO_TS_DEFAULT
const so_ts_clock_max = SocketOption(3) // SO_TS_CLOCK_MAX
const so_ts_clock = SocketOption(4119) // SO_TS_CLOCK
const so_ts_bintime = SocketOption(1) // SO_TS_BINTIME
const so_timestamp = SocketOption(1024) // SO_TIMESTAMP
const so_splice = SocketOption(4131) // SO_SPLICE
const so_sndtimeo = SocketOption(4101) // SO_SNDTIMEO
const so_sndlowat = SocketOption(4099) // SO_SNDLOWAT
const so_sndbuf = SocketOption(4097) // SO_SNDBUF
const so_setfib = SocketOption(4116) // SO_SETFIB
const so_reuseport_lb = SocketOption(65536) // SO_REUSEPORT_LB
const so_reuseport = SocketOption(512) // SO_REUSEPORT
const so_reuseaddr = SocketOption(4) // SO_REUSEADDR
const so_rerror = SocketOption(131072) // SO_RERROR
const so_rcvtimeo = SocketOption(4102) // SO_RCVTIMEO
const so_rcvlowat = SocketOption(4100) // SO_RCVLOWAT
const so_rcvbuf = SocketOption(4098) // SO_RCVBUF
const so_prototype = SocketOption(4118) // SO_PROTOTYPE
const so_protocol = SocketOption(4118) // SO_PROTOCOL
const so_peerlabel = SocketOption(4112) // SO_PEERLABEL
const so_oobinline = SocketOption(256) // SO_OOBINLINE
const so_no_offload = SocketOption(16384) // SO_NO_OFFLOAD
const so_no_ddp = SocketOption(32768) // SO_NO_DDP
const so_nosigpipe = SocketOption(2048) // SO_NOSIGPIPE
const so_max_pacing_rate = SocketOption(4120) // SO_MAX_PACING_RATE
const so_listenqlimit = SocketOption(4113) // SO_LISTENQLIMIT
const so_listenqlen = SocketOption(4114) // SO_LISTENQLEN
const so_listenincqlen = SocketOption(4115) // SO_LISTENINCQLEN
const so_linger = SocketOption(128) // SO_LINGER
const so_label = SocketOption(4105) // SO_LABEL
const so_keepalive = SocketOption(8) // SO_KEEPALIVE
const so_fib = SocketOption(4116) // SO_FIB
const so_error = SocketOption(4103) // SO_ERROR
const so_dontroute = SocketOption(16) // SO_DONTROUTE
const so_domain = SocketOption(4121) // SO_DOMAIN
const so_debug = SocketOption(1) // SO_DEBUG
const so_broadcast = SocketOption(32) // SO_BROADCAST
const so_bintime = SocketOption(8192) // SO_BINTIME
const so_acceptfilter = SocketOption(4096) // SO_ACCEPTFILTER
const so_acceptconn = SocketOption(2) // SO_ACCEPTCONN
const sol_socket = SocketLevel(65535) // SOL_SOCKET
const sock_stream = SocketType(1) // SOCK_STREAM
const sock_seqpacket = SocketType(5) // SOCK_SEQPACKET
const sock_rdm = SocketType(4) // SOCK_RDM
const sock_raw = SocketType(3) // SOCK_RAW
const sock_nonblock = SocketType(536870912) // SOCK_NONBLOCK
const sock_maxaddrlen = SocketType(255) // SOCK_MAXADDRLEN
const sock_dgram = SocketType(2) // SOCK_DGRAM
const sock_clofork = SocketType(1073741824) // SOCK_CLOFORK
const sock_cloexec = SocketType(268435456) // SOCK_CLOEXEC
const ni_numericserv = NameInfoFlag(8) // NI_NUMERICSERV
const ni_numericscope = NameInfoFlag(32) // NI_NUMERICSCOPE
const ni_numerichost = NameInfoFlag(2) // NI_NUMERICHOST
const ni_nofqdn = NameInfoFlag(1) // NI_NOFQDN
const ni_namereqd = NameInfoFlag(4) // NI_NAMEREQD
const ni_maxserv = NameInfoFlag(32) // NI_MAXSERV
const ni_maxhost = NameInfoFlag(1025) // NI_MAXHOST
const ni_dgram = NameInfoFlag(16) // NI_DGRAM
const msg_waitforone = MsgFlag(524288) // MSG_WAITFORONE
const msg_waitall = MsgFlag(64) // MSG_WAITALL
const msg_trunc = MsgFlag(16) // MSG_TRUNC
const msg_peek = MsgFlag(2) // MSG_PEEK
const msg_oob = MsgFlag(1) // MSG_OOB
const msg_notification = MsgFlag(8192) // MSG_NOTIFICATION
const msg_nosignal = MsgFlag(131072) // MSG_NOSIGNAL
const msg_nbio = MsgFlag(16384) // MSG_NBIO
const msg_eor = MsgFlag(8) // MSG_EOR
const msg_eof = MsgFlag(256) // MSG_EOF
const msg_dontwait = MsgFlag(128) // MSG_DONTWAIT
const msg_dontroute = MsgFlag(4) // MSG_DONTROUTE
const msg_ctrunc = MsgFlag(32) // MSG_CTRUNC
const msg_compat = MsgFlag(32768) // MSG_COMPAT
const msg_cmsg_clofork = MsgFlag(4194304) // MSG_CMSG_CLOFORK
const msg_cmsg_cloexec = MsgFlag(262144) // MSG_CMSG_CLOEXEC
const ip_vlan_pcp = SocketOption(75) // IP_VLAN_PCP
const ip_unblock_source = SocketOption(73) // IP_UNBLOCK_SOURCE
const ip_ttl = SocketOption(4) // IP_TTL
const ip_tos = SocketOption(3) // IP_TOS
const ip_sendsrcaddr = SocketOption(7) // IP_SENDSRCADDR
const ip_rsvp_vif_on = SocketOption(17) // IP_RSVP_VIF_ON
const ip_rsvp_vif_off = SocketOption(18) // IP_RSVP_VIF_OFF
const ip_rsvp_on = SocketOption(15) // IP_RSVP_ON
const ip_rsvp_off = SocketOption(16) // IP_RSVP_OFF
const ip_rssbucketid = SocketOption(92) // IP_RSSBUCKETID
const ip_retopts = SocketOption(8) // IP_RETOPTS
const ip_recvttl = SocketOption(65) // IP_RECVTTL
const ip_recvtos = SocketOption(68) // IP_RECVTOS
const ip_recvrssbucketid = SocketOption(94) // IP_RECVRSSBUCKETID
const ip_recvretopts = SocketOption(6) // IP_RECVRETOPTS
const ip_recvorigdstaddr = SocketOption(27) // IP_RECVORIGDSTADDR
const ip_recvopts = SocketOption(5) // IP_RECVOPTS
const ip_recvif = SocketOption(20) // IP_RECVIF
const ip_recvflowid = SocketOption(93) // IP_RECVFLOWID
const ip_recvdstaddr = SocketOption(7) // IP_RECVDSTADDR
const ip_portrange_low = SocketOption(2) // IP_PORTRANGE_LOW
const ip_portrange_high = SocketOption(1) // IP_PORTRANGE_HIGH
const ip_portrange_default = SocketOption(0) // IP_PORTRANGE_DEFAULT
const ip_portrange = SocketOption(19) // IP_PORTRANGE
const ip_origdstaddr = SocketOption(27) // IP_ORIGDSTADDR
const ip_options = SocketOption(1) // IP_OPTIONS
const ip_onesbcast = SocketOption(23) // IP_ONESBCAST
const ip_multicast_vif = SocketOption(14) // IP_MULTICAST_VIF
const ip_multicast_ttl = SocketOption(10) // IP_MULTICAST_TTL
const ip_multicast_loop = SocketOption(11) // IP_MULTICAST_LOOP
const ip_multicast_if = SocketOption(9) // IP_MULTICAST_IF
const ip_msfilter = SocketOption(74) // IP_MSFILTER
const ip_minttl = SocketOption(66) // IP_MINTTL
const ip_max_sock_src_filter = SocketOption(128) // IP_MAX_SOCK_SRC_FILTER
const ip_max_sock_mute_filter = SocketOption(128) // IP_MAX_SOCK_MUTE_FILTER
const ip_max_memberships = SocketOption(4095) // IP_MAX_MEMBERSHIPS
const ip_max_group_src_filter = SocketOption(512) // IP_MAX_GROUP_SRC_FILTER
const ip_ipsec_policy = SocketOption(21) // IP_IPSEC_POLICY
const ip_hdrincl = SocketOption(2) // IP_HDRINCL
const ip_fw_zero = SocketOption(53) // IP_FW_ZERO
const ip_fw_table_list = SocketOption(44) // IP_FW_TABLE_LIST
const ip_fw_table_getsize = SocketOption(43) // IP_FW_TABLE_GETSIZE
const ip_fw_table_flush = SocketOption(42) // IP_FW_TABLE_FLUSH
const ip_fw_table_del = SocketOption(41) // IP_FW_TABLE_DEL
const ip_fw_table_add = SocketOption(40) // IP_FW_TABLE_ADD
const ip_fw_resetlog = SocketOption(55) // IP_FW_RESETLOG
const ip_fw_nat_get_log = SocketOption(59) // IP_FW_NAT_GET_LOG
const ip_fw_nat_get_config = SocketOption(58) // IP_FW_NAT_GET_CONFIG
const ip_fw_nat_del = SocketOption(57) // IP_FW_NAT_DEL
const ip_fw_nat_cfg = SocketOption(56) // IP_FW_NAT_CFG
const ip_fw_get = SocketOption(54) // IP_FW_GET
const ip_fw_flush = SocketOption(52) // IP_FW_FLUSH
const ip_fw_del = SocketOption(51) // IP_FW_DEL
const ip_fw_add = SocketOption(50) // IP_FW_ADD
const ip_fw3 = SocketOption(48) // IP_FW3
const ip_flowtype = SocketOption(91) // IP_FLOWTYPE
const ip_flowid = SocketOption(90) // IP_FLOWID
const ip_dummynet_get = SocketOption(64) // IP_DUMMYNET_GET
const ip_dummynet_flush = SocketOption(62) // IP_DUMMYNET_FLUSH
const ip_dummynet_del = SocketOption(61) // IP_DUMMYNET_DEL
const ip_dummynet_configure = SocketOption(60) // IP_DUMMYNET_CONFIGURE
const ip_dummynet3 = SocketOption(49) // IP_DUMMYNET3
const ip_drop_source_membership = SocketOption(71) // IP_DROP_SOURCE_MEMBERSHIP
const ip_drop_membership = SocketOption(13) // IP_DROP_MEMBERSHIP
const ip_dontfrag = SocketOption(67) // IP_DONTFRAG
const ip_default_multicast_ttl = SocketOption(1) // IP_DEFAULT_MULTICAST_TTL
const ip_default_multicast_loop = SocketOption(1) // IP_DEFAULT_MULTICAST_LOOP
const ip_block_source = SocketOption(72) // IP_BLOCK_SOURCE
const ip_bindany = SocketOption(24) // IP_BINDANY
const ip_add_source_membership = SocketOption(70) // IP_ADD_SOURCE_MEMBERSHIP
const ip_add_membership = SocketOption(12) // IP_ADD_MEMBERSHIP
const ipv6_vlan_pcp = SocketOption(75) // IPV6_VLAN_PCP
const ipv6_v6only = SocketOption(27) // IPV6_V6ONLY
const ipv6_use_min_mtu = SocketOption(42) // IPV6_USE_MIN_MTU
const ipv6_unicast_hops = SocketOption(4) // IPV6_UNICAST_HOPS
const ipv6_tclass = SocketOption(61) // IPV6_TCLASS
const ipv6_sockopt_reserved1 = SocketOption(3) // IPV6_SOCKOPT_RESERVED1
const ipv6_rthdr_type_0 = SocketOption(0) // IPV6_RTHDR_TYPE_0
const ipv6_rthdr_strict = SocketOption(1) // IPV6_RTHDR_STRICT
const ipv6_rthdr_loose = SocketOption(0) // IPV6_RTHDR_LOOSE
const ipv6_rthdr = SocketOption(51) // IPV6_RTHDR
const ipv6_rthdrdstopts = SocketOption(35) // IPV6_RTHDRDSTOPTS
const ipv6_rssbucketid = SocketOption(69) // IPV6_RSSBUCKETID
const ipv6_recvtclass = SocketOption(57) // IPV6_RECVTCLASS
const ipv6_recvrthdr = SocketOption(38) // IPV6_RECVRTHDR
const ipv6_recvrssbucketid = SocketOption(71) // IPV6_RECVRSSBUCKETID
const ipv6_recvpktinfo = SocketOption(36) // IPV6_RECVPKTINFO
const ipv6_recvpathmtu = SocketOption(43) // IPV6_RECVPATHMTU
const ipv6_recvorigdstaddr = SocketOption(72) // IPV6_RECVORIGDSTADDR
const ipv6_recvhopopts = SocketOption(39) // IPV6_RECVHOPOPTS
const ipv6_recvhoplimit = SocketOption(37) // IPV6_RECVHOPLIMIT
const ipv6_recvflowid = SocketOption(70) // IPV6_RECVFLOWID
const ipv6_recvdstopts = SocketOption(40) // IPV6_RECVDSTOPTS
const ipv6_prefer_tempaddr = SocketOption(63) // IPV6_PREFER_TEMPADDR
const ipv6_portrange_low = SocketOption(2) // IPV6_PORTRANGE_LOW
const ipv6_portrange_high = SocketOption(1) // IPV6_PORTRANGE_HIGH
const ipv6_portrange_default = SocketOption(0) // IPV6_PORTRANGE_DEFAULT
const ipv6_portrange = SocketOption(14) // IPV6_PORTRANGE
const ipv6_pktinfo = SocketOption(46) // IPV6_PKTINFO
const ipv6_pathmtu = SocketOption(44) // IPV6_PATHMTU
const ipv6_origdstaddr = SocketOption(72) // IPV6_ORIGDSTADDR
const ipv6_nexthop = SocketOption(48) // IPV6_NEXTHOP
const ipv6_multicast_loop = SocketOption(11) // IPV6_MULTICAST_LOOP
const ipv6_multicast_if = SocketOption(9) // IPV6_MULTICAST_IF
const ipv6_multicast_hops = SocketOption(10) // IPV6_MULTICAST_HOPS
const ipv6_msfilter = SocketOption(74) // IPV6_MSFILTER
const ipv6_max_sock_src_filter = SocketOption(128) // IPV6_MAX_SOCK_SRC_FILTER
const ipv6_max_memberships = SocketOption(4095) // IPV6_MAX_MEMBERSHIPS
const ipv6_max_group_src_filter = SocketOption(512) // IPV6_MAX_GROUP_SRC_FILTER
const ipv6_leave_group = SocketOption(13) // IPV6_LEAVE_GROUP
const ipv6_join_group = SocketOption(12) // IPV6_JOIN_GROUP
const ipv6_ipsec_policy = SocketOption(28) // IPV6_IPSEC_POLICY
const ipv6_hopopts = SocketOption(49) // IPV6_HOPOPTS
const ipv6_hoplimit = SocketOption(47) // IPV6_HOPLIMIT
const ipv6_fw_zero = SocketOption(33) // IPV6_FW_ZERO
const ipv6_fw_get = SocketOption(34) // IPV6_FW_GET
const ipv6_fw_flush = SocketOption(32) // IPV6_FW_FLUSH
const ipv6_fw_del = SocketOption(31) // IPV6_FW_DEL
const ipv6_fw_add = SocketOption(30) // IPV6_FW_ADD
const ipv6_flowtype = SocketOption(68) // IPV6_FLOWTYPE
const ipv6_flowid = SocketOption(67) // IPV6_FLOWID
const ipv6_dstopts = SocketOption(50) // IPV6_DSTOPTS
const ipv6_dontfrag = SocketOption(62) // IPV6_DONTFRAG
const ipv6_default_multicast_loop = SocketOption(1) // IPV6_DEFAULT_MULTICAST_LOOP
const ipv6_default_multicast_hops = SocketOption(1) // IPV6_DEFAULT_MULTICAST_HOPS
const ipv6_checksum = SocketOption(26) // IPV6_CHECKSUM
const ipv6_bindv6only = SocketOption(27) // IPV6_BINDV6ONLY
const ipv6_bindany = SocketOption(64) // IPV6_BINDANY
const ipv6_autoflowlabel = SocketOption(59) // IPV6_AUTOFLOWLABEL
const ipproto_xtp = SocketLevel(36) // IPPROTO_XTP
const ipproto_xnet = SocketLevel(15) // IPPROTO_XNET
const ipproto_wsn = SocketLevel(74) // IPPROTO_WSN
const ipproto_wbmon = SocketLevel(78) // IPPROTO_WBMON
const ipproto_wbexpak = SocketLevel(79) // IPPROTO_WBEXPAK
const ipproto_vmtp = SocketLevel(81) // IPPROTO_VMTP
const ipproto_visa = SocketLevel(70) // IPPROTO_VISA
const ipproto_vines = SocketLevel(83) // IPPROTO_VINES
const ipproto_udp = SocketLevel(17) // IPPROTO_UDP
const ipproto_udplite = SocketLevel(136) // IPPROTO_UDPLITE
const ipproto_ttp = SocketLevel(84) // IPPROTO_TTP
const ipproto_trunk2 = SocketLevel(24) // IPPROTO_TRUNK2
const ipproto_trunk1 = SocketLevel(23) // IPPROTO_TRUNK1
const ipproto_tp = SocketLevel(29) // IPPROTO_TP
const ipproto_tpxx = SocketLevel(39) // IPPROTO_TPXX
const ipproto_tlsp = SocketLevel(56) // IPPROTO_TLSP
const ipproto_tcp = SocketLevel(6) // IPPROTO_TCP
const ipproto_tcf = SocketLevel(87) // IPPROTO_TCF
const ipproto_swipe = SocketLevel(53) // IPPROTO_SWIPE
const ipproto_svmtp = SocketLevel(82) // IPPROTO_SVMTP
const ipproto_st = SocketLevel(7) // IPPROTO_ST
const ipproto_srpc = SocketLevel(90) // IPPROTO_SRPC
const ipproto_spacer = SocketLevel(32767) // IPPROTO_SPACER
const ipproto_skip = SocketLevel(57) // IPPROTO_SKIP
const ipproto_shim6 = SocketLevel(140) // IPPROTO_SHIM6
const ipproto_send = SocketLevel(259) // IPPROTO_SEND
const ipproto_sdrp = SocketLevel(42) // IPPROTO_SDRP
const ipproto_sctp = SocketLevel(132) // IPPROTO_SCTP
const ipproto_sccsp = SocketLevel(96) // IPPROTO_SCCSP
const ipproto_satmon = SocketLevel(69) // IPPROTO_SATMON
const ipproto_satexpak = SocketLevel(64) // IPPROTO_SATEXPAK
const ipproto_rvd = SocketLevel(66) // IPPROTO_RVD
const ipproto_rsvp = SocketLevel(46) // IPPROTO_RSVP
const ipproto_routing = SocketLevel(43) // IPPROTO_ROUTING
const ipproto_reserved_254 = SocketLevel(254) // IPPROTO_RESERVED_254
const ipproto_reserved_253 = SocketLevel(253) // IPPROTO_RESERVED_253
const ipproto_rdp = SocketLevel(27) // IPPROTO_RDP
const ipproto_rccmon = SocketLevel(10) // IPPROTO_RCCMON
const ipproto_raw = SocketLevel(255) // IPPROTO_RAW
const ipproto_pvp = SocketLevel(75) // IPPROTO_PVP
const ipproto_pup = SocketLevel(12) // IPPROTO_PUP
const ipproto_prm = SocketLevel(21) // IPPROTO_PRM
const ipproto_pim = SocketLevel(103) // IPPROTO_PIM
const ipproto_pigp = SocketLevel(9) // IPPROTO_PIGP
const ipproto_pgm = SocketLevel(113) // IPPROTO_PGM
const ipproto_pfsync = SocketLevel(240) // IPPROTO_PFSYNC
const ipproto_ospfigp = SocketLevel(89) // IPPROTO_OSPFIGP
const ipproto_old_divert = SocketLevel(254) // IPPROTO_OLD_DIVERT
const ipproto_nvpii = SocketLevel(11) // IPPROTO_NVPII
const ipproto_nsp = SocketLevel(31) // IPPROTO_NSP
const ipproto_none = SocketLevel(59) // IPPROTO_NONE
const ipproto_nhrp = SocketLevel(54) // IPPROTO_NHRP
const ipproto_nd = SocketLevel(77) // IPPROTO_ND
const ipproto_mux = SocketLevel(18) // IPPROTO_MUX
const ipproto_mtp = SocketLevel(92) // IPPROTO_MTP
const ipproto_mpls = SocketLevel(137) // IPPROTO_MPLS
const ipproto_mobile = SocketLevel(55) // IPPROTO_MOBILE
const ipproto_micp = SocketLevel(95) // IPPROTO_MICP
const ipproto_mh = SocketLevel(135) // IPPROTO_MH
const ipproto_mhrp = SocketLevel(48) // IPPROTO_MHRP
const ipproto_meas = SocketLevel(19) // IPPROTO_MEAS
const ipproto_max = SocketLevel(256) // IPPROTO_MAX
const ipproto_leaf2 = SocketLevel(26) // IPPROTO_LEAF2
const ipproto_leaf1 = SocketLevel(25) // IPPROTO_LEAF1
const ipproto_larp = SocketLevel(91) // IPPROTO_LARP
const ipproto_kryptolan = SocketLevel(65) // IPPROTO_KRYPTOLAN
const ipproto_irtp = SocketLevel(28) // IPPROTO_IRTP
const ipproto_ip = SocketLevel(0) // IPPROTO_IP
const ipproto_ipv6 = SocketLevel(41) // IPPROTO_IPV6
const ipproto_ipv4 = SocketLevel(4) // IPPROTO_IPV4
const ipproto_ippc = SocketLevel(67) // IPPROTO_IPPC
const ipproto_ipip = SocketLevel(4) // IPPROTO_IPIP
const ipproto_ipeip = SocketLevel(94) // IPPROTO_IPEIP
const ipproto_ipcv = SocketLevel(71) // IPPROTO_IPCV
const ipproto_ipcomp = SocketLevel(108) // IPPROTO_IPCOMP
const ipproto_inp = SocketLevel(32) // IPPROTO_INP
const ipproto_inlsp = SocketLevel(52) // IPPROTO_INLSP
const ipproto_il = SocketLevel(40) // IPPROTO_IL
const ipproto_igrp = SocketLevel(88) // IPPROTO_IGRP
const ipproto_igp = SocketLevel(85) // IPPROTO_IGP
const ipproto_igmp = SocketLevel(2) // IPPROTO_IGMP
const ipproto_idrp = SocketLevel(45) // IPPROTO_IDRP
const ipproto_idp = SocketLevel(22) // IPPROTO_IDP
const ipproto_idpr = SocketLevel(35) // IPPROTO_IDPR
const ipproto_icmp = SocketLevel(1) // IPPROTO_ICMP
const ipproto_icmpv6 = SocketLevel(58) // IPPROTO_ICMPV6
const ipproto_hopopts = SocketLevel(0) // IPPROTO_HOPOPTS
const ipproto_hmp = SocketLevel(20) // IPPROTO_HMP
const ipproto_hip = SocketLevel(139) // IPPROTO_HIP
const ipproto_hello = SocketLevel(63) // IPPROTO_HELLO
const ipproto_gre = SocketLevel(47) // IPPROTO_GRE
const ipproto_gmtp = SocketLevel(100) // IPPROTO_GMTP
const ipproto_ggp = SocketLevel(3) // IPPROTO_GGP
const ipproto_fragment = SocketLevel(44) // IPPROTO_FRAGMENT
const ipproto_etherip = SocketLevel(97) // IPPROTO_ETHERIP
const ipproto_esp = SocketLevel(50) // IPPROTO_ESP
const ipproto_eon = SocketLevel(80) // IPPROTO_EON
const ipproto_encap = SocketLevel(98) // IPPROTO_ENCAP
const ipproto_emcon = SocketLevel(14) // IPPROTO_EMCON
const ipproto_egp = SocketLevel(8) // IPPROTO_EGP
const ipproto_dstopts = SocketLevel(60) // IPPROTO_DSTOPTS
const ipproto_done = SocketLevel(257) // IPPROTO_DONE
const ipproto_divert = SocketLevel(258) // IPPROTO_DIVERT
const ipproto_dgp = SocketLevel(86) // IPPROTO_DGP
const ipproto_ddp = SocketLevel(37) // IPPROTO_DDP
const ipproto_dccp = SocketLevel(33) // IPPROTO_DCCP
const ipproto_cpnx = SocketLevel(72) // IPPROTO_CPNX
const ipproto_cphb = SocketLevel(73) // IPPROTO_CPHB
const ipproto_cmtp = SocketLevel(38) // IPPROTO_CMTP
const ipproto_chaos = SocketLevel(16) // IPPROTO_CHAOS
const ipproto_cftp = SocketLevel(62) // IPPROTO_CFTP
const ipproto_carp = SocketLevel(112) // IPPROTO_CARP
const ipproto_brsatmon = SocketLevel(76) // IPPROTO_BRSATMON
const ipproto_blt = SocketLevel(30) // IPPROTO_BLT
const ipproto_bha = SocketLevel(49) // IPPROTO_BHA
const ipproto_ax25 = SocketLevel(93) // IPPROTO_AX25
const ipproto_argus = SocketLevel(13) // IPPROTO_ARGUS
const ipproto_apes = SocketLevel(99) // IPPROTO_APES
const ipproto_ah = SocketLevel(51) // IPPROTO_AH
const ipproto_ahip = SocketLevel(61) // IPPROTO_AHIP
const ipproto_adfs = SocketLevel(68) // IPPROTO_ADFS
const ipproto_3pc = SocketLevel(34) // IPPROTO_3PC
const ai_v4mapped_cfg = AddrInfoFlag(512) // AI_V4MAPPED_CFG
const ai_v4mapped = AddrInfoFlag(2048) // AI_V4MAPPED
const ai_passive = AddrInfoFlag(1) // AI_PASSIVE
const ai_numericserv = AddrInfoFlag(8) // AI_NUMERICSERV
const ai_numerichost = AddrInfoFlag(4) // AI_NUMERICHOST
const ai_mask = AddrInfoFlag(3343) // AI_MASK
const ai_default = AddrInfoFlag(1536) // AI_DEFAULT
const ai_canonname = AddrInfoFlag(2) // AI_CANONNAME
const ai_all = AddrInfoFlag(256) // AI_ALL
const ai_addrconfig = AddrInfoFlag(1024) // AI_ADDRCONFIG
const af_vendor47 = AddrFamily(133) // AF_VENDOR47
const af_vendor46 = AddrFamily(131) // AF_VENDOR46
const af_vendor45 = AddrFamily(129) // AF_VENDOR45
const af_vendor44 = AddrFamily(127) // AF_VENDOR44
const af_vendor43 = AddrFamily(125) // AF_VENDOR43
const af_vendor42 = AddrFamily(123) // AF_VENDOR42
const af_vendor41 = AddrFamily(121) // AF_VENDOR41
const af_vendor40 = AddrFamily(119) // AF_VENDOR40
const af_vendor39 = AddrFamily(117) // AF_VENDOR39
const af_vendor38 = AddrFamily(115) // AF_VENDOR38
const af_vendor37 = AddrFamily(113) // AF_VENDOR37
const af_vendor36 = AddrFamily(111) // AF_VENDOR36
const af_vendor35 = AddrFamily(109) // AF_VENDOR35
const af_vendor34 = AddrFamily(107) // AF_VENDOR34
const af_vendor33 = AddrFamily(105) // AF_VENDOR33
const af_vendor32 = AddrFamily(103) // AF_VENDOR32
const af_vendor31 = AddrFamily(101) // AF_VENDOR31
const af_vendor30 = AddrFamily(99) // AF_VENDOR30
const af_vendor29 = AddrFamily(97) // AF_VENDOR29
const af_vendor28 = AddrFamily(95) // AF_VENDOR28
const af_vendor27 = AddrFamily(93) // AF_VENDOR27
const af_vendor26 = AddrFamily(91) // AF_VENDOR26
const af_vendor25 = AddrFamily(89) // AF_VENDOR25
const af_vendor24 = AddrFamily(87) // AF_VENDOR24
const af_vendor23 = AddrFamily(85) // AF_VENDOR23
const af_vendor22 = AddrFamily(83) // AF_VENDOR22
const af_vendor21 = AddrFamily(81) // AF_VENDOR21
const af_vendor20 = AddrFamily(79) // AF_VENDOR20
const af_vendor19 = AddrFamily(77) // AF_VENDOR19
const af_vendor18 = AddrFamily(75) // AF_VENDOR18
const af_vendor17 = AddrFamily(73) // AF_VENDOR17
const af_vendor16 = AddrFamily(71) // AF_VENDOR16
const af_vendor15 = AddrFamily(69) // AF_VENDOR15
const af_vendor14 = AddrFamily(67) // AF_VENDOR14
const af_vendor13 = AddrFamily(65) // AF_VENDOR13
const af_vendor12 = AddrFamily(63) // AF_VENDOR12
const af_vendor11 = AddrFamily(61) // AF_VENDOR11
const af_vendor10 = AddrFamily(59) // AF_VENDOR10
const af_vendor09 = AddrFamily(57) // AF_VENDOR09
const af_vendor08 = AddrFamily(55) // AF_VENDOR08
const af_vendor07 = AddrFamily(53) // AF_VENDOR07
const af_vendor06 = AddrFamily(51) // AF_VENDOR06
const af_vendor05 = AddrFamily(49) // AF_VENDOR05
const af_vendor04 = AddrFamily(47) // AF_VENDOR04
const af_vendor03 = AddrFamily(45) // AF_VENDOR03
const af_vendor01 = AddrFamily(41) // AF_VENDOR01
const af_vendor00 = AddrFamily(39) // AF_VENDOR00
const af_unspec = AddrFamily(0) // AF_UNSPEC
const af_unix = AddrFamily(1) // AF_UNIX
const af_sna = AddrFamily(11) // AF_SNA
const af_slow = AddrFamily(33) // AF_SLOW
const af_sip = AddrFamily(24) // AF_SIP
const af_scluster = AddrFamily(34) // AF_SCLUSTER
const af_route = AddrFamily(17) // AF_ROUTE
const af_pup = AddrFamily(4) // AF_PUP
const af_osi = AddrFamily(7) // AF_OSI
const af_netlink = AddrFamily(38) // AF_NETLINK
const af_netgraph = AddrFamily(32) // AF_NETGRAPH
const af_netbios = AddrFamily(6) // AF_NETBIOS
const af_natm = AddrFamily(29) // AF_NATM
const af_max = AddrFamily(46) // AF_MAX
const af_local = AddrFamily(1) // AF_LOCAL
const af_link = AddrFamily(18) // AF_LINK
const af_lat = AddrFamily(14) // AF_LAT
const af_iso = AddrFamily(7) // AF_ISO
const af_isdn = AddrFamily(26) // AF_ISDN
const af_ipx = AddrFamily(23) // AF_IPX
const af_ipfwlog = AddrFamily(46) // AF_IPFWLOG
const af_inet_sdp = AddrFamily(40) // AF_INET_SDP
const af_inet = AddrFamily(2) // AF_INET
const af_inet6_sdp = AddrFamily(42) // AF_INET6_SDP
const af_inet6 = AddrFamily(28) // AF_INET6
const af_implink = AddrFamily(3) // AF_IMPLINK
const af_ieee80211 = AddrFamily(37) // AF_IEEE80211
const af_hyperv = AddrFamily(43) // AF_HYPERV
const af_hylink = AddrFamily(15) // AF_HYLINK
const af_ecma = AddrFamily(8) // AF_ECMA
const af_e164 = AddrFamily(26) // AF_E164
const af_dli = AddrFamily(13) // AF_DLI
const af_divert = AddrFamily(44) // AF_DIVERT
const af_decnet = AddrFamily(12) // AF_DECNET
const af_datakit = AddrFamily(9) // AF_DATAKIT
const af_coip = AddrFamily(20) // AF_COIP
const af_cnt = AddrFamily(21) // AF_CNT
const af_chaos = AddrFamily(5) // AF_CHAOS
const af_ccitt = AddrFamily(10) // AF_CCITT
const af_bluetooth = AddrFamily(36) // AF_BLUETOOTH
const af_atm = AddrFamily(30) // AF_ATM
const af_arp = AddrFamily(35) // AF_ARP
const af_appletalk = AddrFamily(16) // AF_APPLETALK
const max_unix_path_len = $if linux {
	108
} $else $if windows {
	108
} $else {
	104
}

fn addr_info #

fn addr_info(hints AddrInfoParams) ![]AddrInfo

addr_info translates the network addresses and services. This is a low-level wrapper around the getaddrinfo(3) C API.

fn find_network_interface #

fn find_network_interface(s string) !NetworkInterfaceId

find_network_interface returns the network interface index and name by provided string s. If network interface is not present the NetworkInterfaceNotFound error will be returned. See also index_to_name() and name_to_index().

Examples

assert netio.find_network_interface('eth0')!.index == 2
assert netio.find_network_interface('2')!.name == 'eth0'

fn index_to_name #

fn index_to_name(index u32) !string

index_to_name translates the network interface index to name e.g. 'eth0'. See also if_indextoname(3p).

fn name_info #

fn name_info(sa SocketAddr, params NameInfoParams) !(string, string)

name_info does address-to-name translation and returns the host and service names. See getnameinfo(3) for details.

fn name_to_index #

fn name_to_index(name string) !u32

name_to_index translates the network interface name to index. See also if_nametoindex(3p).

fn network_interfaces #

fn network_interfaces() ![]NetworkInterfaceId

network_interfaces returns an array with names and indexes of all network interfaces on system. See also if_nameindex(3p).

fn Socket.new #

fn Socket.new(domain AddrFamily, st SocketType, proto Protocol) !Socket

Socket.new creates the new socket. See socket(7) and socket(3) for details.

fn SocketAddr.from_ptr #

unsafe
fn SocketAddr.from_ptr(ptr voidptr, size isize) !SocketAddr

SocketAddr.from_ptr creates new socket address from specified pointer.

Note: Data is reused, not copied.

fn SocketAddr.from_ptr_copy #

unsafe
fn SocketAddr.from_ptr_copy(ptr voidptr, size isize) !SocketAddr

SocketAddr.from_ptr_copy creates new socket address by copying data from specified pointer.

fn SocketAddr.new #

unsafe
fn SocketAddr.new(af AddrFamily, size isize) SocketAddr

SocketAddr.new creates new instance of SocketAddr with specified address family and size.

This function allocates memory (zero filled) for the address, but does not initialize the address itself, you need to do that manually. The benefit is that you can create the any kind of socket address.

SocketAddr is a builder for sockaddr(3type) objects. Use this function only if you understand what you do. Using the write() method you must write the data for the desired socket address, ensuring the correct sizes of all types, the order of the fields in the struct, the byte order, and the total size of the struct. The sizes and byte order may vary by platform, so you'll need to keep an eye on that as well. A mistake while creating an address will crash your application. So this function is marked as unsafe.

The example below creates a sockaddr_in struct describing the loopback IPv4-address 127.0.0.1 with port number 1080. Note the comment in the example. This is a fragment of sockaddr_in(3type) manual page, which shows the target C struct. Summing the field sizes yields 8 bytes, but we need to allocate 16 bytes according to the <netinet/in.h>. Data must be padded to sockaddr struct size which is 16 bytes. Each field is then written in turn, from top to bottom. Keep in mind that two-byte address family field (sin_family in this case) is already written. According to the manual page, the address and port are written using the network (big-endian) byte order.

Example

import encoding.binary
import netio

// struct sockaddr_in {
//     sa_family_t     sin_family;     /* AF_INET */
//     in_port_t       sin_port;       /* Port number */
//     struct in_addr  sin_addr;       /* IPv4 address */
// };
//
// struct in_addr {
//     in_addr_t s_addr;
// };
//
// typedef uint32_t in_addr_t;
// typedef uint16_t in_port_t;

mut sa := unsafe { netio.SocketAddr.new(netio.af_inet, 16) }
unsafe {
	sa.write(binary.big_endian_get_u16(u16(1080)))!
	sa.write([u8(127), 0, 0, 1])!
}
println(sa)

fn SocketAddr.new_ipv4 #

fn SocketAddr.new_ipv4(addr [4]u8, port u16) SocketAddr

SocketAddr.new_ipv4 creates new AF_INET socket address. addr must be set in network (big-endian) byte order.

fn SocketAddr.new_ipv6 #

fn SocketAddr.new_ipv6(addr [16]u8, port u16, params Inet6SocketAddrParams) SocketAddr

SocketAddr.new_ipv6 creates new AF_INET6 socket address. addr must be set in network (big-endian) byte order. Use find_network_interface() to get an integer scope_id from its string representation.

fn SocketAddr.new_unix #

fn SocketAddr.new_unix(path string) !SocketAddr

SocketAddr.new_unix creates new AF_UNIX socket address with given path. The path must fit in platform dependent max_unix_path_len const value.

type AddrFamily #

type AddrFamily = int

The socket address family type. See address_families(7).

type AddrInfoFlag #

type AddrInfoFlag = int

Flag type for addr_info(). See getaddrinfo(3) for details.

type MsgFlag #

type MsgFlag = int

Type for recv, recvfrom, recvmsg, send, sendto, sendmsg flags.

type NameInfoFlag #

type NameInfoFlag = int

Flag type for name_info(). See getnameinfo(3) for details.

type Protocol #

type Protocol = int

The protocol number. See protocols(5).

type SocketLevel #

type SocketLevel = int

The socket level type.

type SocketOption #

type SocketOption = int

The socket option type.

type SocketType #

type SocketType = int

The socket type.

enum Shutdown #

enum Shutdown {
	read
	write
	read_and_write
}

Socket shutdown modes. See shutdown(3p) for details.

struct AddrInfo #

struct AddrInfo {
pub:
	flags     AddrInfoFlag
	family    AddrFamily
	socktype  SocketType
	protocol  Protocol
	addr      SocketAddr
	canonical string
}

AddrInfo represents the addrinfo struct.

struct AddrInfoParams #

@[params]
struct AddrInfoParams {
pub:
	node     ?string
	service  ?string
	family   AddrFamily = af_unspec
	socktype SocketType
	protocol Protocol
	flags    AddrInfoFlag
}

struct Inet6SocketAddrParams #

@[params]
struct Inet6SocketAddrParams {
pub:
	flow_info u32
	scope_id  u32
}

struct NameInfoParams #

@[params]
struct NameInfoParams {
pub:
	flags NameInfoFlag
}

struct NetworkInterfaceId #

struct NetworkInterfaceId {
pub:
	index u32
	name  string
}

struct NetworkInterfaceNotFound #

struct NetworkInterfaceNotFound {
	Error
pub:
	index u32
	name  string
}

fn (NetworkInterfaceNotFound) msg #

fn (e NetworkInterfaceNotFound) msg() string

msg returns the error message.

struct Socket #

struct Socket {
pub:
	fd int = -1
}

fn (Socket) type #

fn (s Socket) type() !SocketType

type reports the actual socket type. Look for sock_* constants.

fn (Socket) connect #

fn (s Socket) connect(addr SocketAddr) !

connect connects a socket. See connect(3p) for details.

fn (Socket) bind #

fn (s Socket) bind(addr SocketAddr) !

bind binds a name to a socket. See bind(3p) for details.

fn (Socket) listen #

fn (s Socket) listen(backlog int) !

listen starts listening for socket connections and limit the queue of incoming connections. See listen(3p) for details.

fn (Socket) accept #

fn (s Socket) accept() !(Socket, SocketAddr)

accept accepts a new connection on a socket. The return values are the new socket connected to remote and the remote socket address. See accept(3p) for details.

fn (Socket) set_option #

fn (s Socket) set_option[T](level SocketLevel, option SocketOption, value T) !

set_option sets the socket option. See socket(7) and setsockopt(3p) for details.

fn (Socket) get_option #

fn (s Socket) get_option[T](level SocketLevel, option SocketOption) !T

get_option gets the socket option. See socket(7) and getsockopt(3p) for details.

Example

import netio
mut socket := netio.Socket.new(netio.af_inet, netio.sock_stream, 0)!
socket.set_option(netio.sol_socket, netio.so_reuseaddr, 1)!
assert socket.get_option[int](netio.sol_socket, netio.so_reuseaddr)! == 1

fn (Socket) recv #

fn (s Socket) recv(mut buf []u8, flags MsgFlag) !int

recv receives a message from a connected socket. See recv(3p) for details.

fn (Socket) recv_from #

fn (s Socket) recv_from(mut buf []u8, flags MsgFlag) !(int, SocketAddr)

recv_from receives a message from a connected socket and returns the number of bytes read and the remote peer address. See recvfrom(3p) for details.

fn (Socket) send #

fn (s Socket) send(buf []u8, flags MsgFlag) !int

send sends a message on socket. See send(3p) for details.

fn (Socket) send_to #

fn (s Socket) send_to(buf []u8, dst SocketAddr, flags MsgFlag) !int

send_to sends a message on socket using the dst socket address as destination instead of the socket peer address. See sendto(3p) for details.

fn (Socket) shutdown #

fn (s Socket) shutdown(how Shutdown) !

shutdown shut downs socket send and receive operations. See shutodwn(3p) for details.

fn (Socket) close #

fn (s Socket) close() !

close closes the socket. See close(3p) for details.

struct SocketAddr #

struct SocketAddr {
mut:
	data &u8 = unsafe { nil }
	len  int
	pos  int
}

fn (SocketAddr) family #

fn (a SocketAddr) family() AddrFamily

family returns the socket address family.

Note: It returns 0 if socket address is nil, see also is_empty().

fn (SocketAddr) is_empty #

fn (a SocketAddr) is_empty() bool

is_empty returns true if socket address is unspecified: the data pointer is nil or socket address data is zero. Empty address cannot be used in bind() and connect() calls.

fn (SocketAddr) write #

unsafe
fn (mut a SocketAddr) write(buf []u8) !int

write writes buf.len bytes of data to the socket address memory area and returns the number of bytes written. write will return an error if the socket address pointer is nil or the buffer length, including the length of the data already written, exceeds the size of the socket address.

fn (SocketAddr) ptr #

fn (a SocketAddr) ptr() &u8

ptr returns the pointer to sockaddr data.

fn (SocketAddr) size #

fn (a SocketAddr) size() u32

size reports the size of sockaddr data.

fn (SocketAddr) str #

fn (a SocketAddr) str() string

str returns the string representation of socket address. Only AF_UNIX, AF_INET, and AF_INET6 are supported. str will return a string consisting of the address and port number separated by a colon, or the absolute path to the socket file. The IPv6 address will be returned in expanded form and enclosed in square brackets. For all other address families, str will return a string of the form SocketAddr(0x00000000) with the socket address data pointer in brackets.

Note: See also name_info().