This commit is contained in:
ge
2026-04-12 16:30:28 +03:00
parent 5b56659d21
commit 2d2281b8cc
26 changed files with 1002 additions and 640 deletions
+1
View File
@@ -0,0 +1 @@
examples/
+5 -6
View File
@@ -1,13 +1,12 @@
# Networking Library for V # Networking Library for V
**netio** is a networking library for V programming language. **netio** is a flexible networking library for V programming language.
This implementation aims to be as flexible and portable.
It heavily relies on the libc. It heavily relies on the libc.
Differences with the V standard library **net** module: Differences with the V standard library `net` module:
* Provides the low-level wrappers around C API functions. * Provides the low-level wrappers around C API.
* Supports any kind of: socket type, socket option, address family and protocol. * Supports any kind of sockets, socket options, address families and protocols.
**netio** provides a high-level abstractions over BSD sockets: `TCPListener`, **netio** also provides a high-level abstractions over BSD sockets: `TCPListener`,
`TCPStream`, `UDPSocket`. `TCPStream`, `UDPSocket`.
-44
View File
@@ -1,44 +0,0 @@
module netio
/*
Address families defined on Darwin.
*/
pub const af_appletalk = AddrFamily(C.AF_APPLETALK)
pub const af_ccitt = AddrFamily(C.AF_CCITT)
pub const af_chaos = AddrFamily(C.AF_CHAOS)
pub const af_cnt = AddrFamily(C.AF_CNT)
pub const af_coip = AddrFamily(C.AF_COIP)
pub const af_datakit = AddrFamily(C.AF_DATAKIT)
pub const af_decnet = AddrFamily(C.AF_DECnet)
pub const af_dli = AddrFamily(C.AF_DLI)
pub const af_e164 = AddrFamily(C.AF_E164)
pub const af_ecma = AddrFamily(C.AF_ECMA)
pub const af_hylink = AddrFamily(C.AF_HYLINK)
pub const af_ieee80211 = AddrFamily(C.AF_IEEE80211)
pub const af_implink = AddrFamily(C.AF_IMPLINK)
pub const af_inet6 = AddrFamily(C.AF_INET6)
pub const af_inet = AddrFamily(C.AF_INET)
pub const af_ipx = AddrFamily(C.AF_IPX)
pub const af_isdn = AddrFamily(C.AF_ISDN)
pub const af_iso = AddrFamily(C.AF_ISO)
pub const af_lat = AddrFamily(C.AF_LAT)
pub const af_link = AddrFamily(C.AF_LINK)
pub const af_local = AddrFamily(C.AF_LOCAL)
pub const af_max = AddrFamily(C.AF_MAX)
pub const af_natm = AddrFamily(C.AF_NATM)
pub const af_ndrv = AddrFamily(C.AF_NDRV)
pub const af_netbios = AddrFamily(C.AF_NETBIOS)
pub const af_ns = AddrFamily(C.AF_NS)
pub const af_osi = AddrFamily(C.AF_OSI)
pub const af_ppp = AddrFamily(C.AF_PPP)
pub const af_pup = AddrFamily(C.AF_PUP)
pub const af_reserved_36 = AddrFamily(C.AF_RESERVED_36)
pub const af_route = AddrFamily(C.AF_ROUTE)
pub const af_sip = AddrFamily(C.AF_SIP)
pub const af_sna = AddrFamily(C.AF_SNA)
pub const af_system = AddrFamily(C.AF_SYSTEM)
pub const af_unix = AddrFamily(C.AF_UNIX)
pub const af_unspec = AddrFamily(C.AF_UNSPEC)
pub const af_utun = AddrFamily(C.AF_UTUN)
pub const af_vsock = AddrFamily(C.AF_VSOCK)
-10
View File
@@ -1,10 +0,0 @@
module netio
/*
Common address families. Should work on most platforms.
*/
pub const af_unspec = AddrFamily(C.AF_UNSPEC)
pub const af_unix = AddrFamily(C.AF_UNIX)
pub const af_inet = AddrFamily(C.AF_INET)
pub const af_inet6 = AddrFamily(C.AF_INET6)
-96
View File
@@ -1,96 +0,0 @@
module netio
/*
Address families defined on FreeBSD.
*/
pub const af_appletalk = AddrFamily(C.AF_APPLETALK)
pub const af_arp = AddrFamily(C.AF_ARP)
pub const af_atm = AddrFamily(C.AF_ATM)
pub const af_bluetooth = AddrFamily(C.AF_BLUETOOTH)
pub const af_ccitt = AddrFamily(C.AF_CCITT)
pub const af_chaos = AddrFamily(C.AF_CHAOS)
pub const af_cnt = AddrFamily(C.AF_CNT)
pub const af_coip = AddrFamily(C.AF_COIP)
pub const af_datakit = AddrFamily(C.AF_DATAKIT)
pub const af_decnet = AddrFamily(C.AF_DECnet)
pub const af_divert = AddrFamily(C.AF_DIVERT)
pub const af_dli = AddrFamily(C.AF_DLI)
pub const af_e164 = AddrFamily(C.AF_E164)
pub const af_ecma = AddrFamily(C.AF_ECMA)
pub const af_hylink = AddrFamily(C.AF_HYLINK)
pub const af_hyperv = AddrFamily(C.AF_HYPERV)
pub const af_ieee80211 = AddrFamily(C.AF_IEEE80211)
pub const af_implink = AddrFamily(C.AF_IMPLINK)
pub const af_inet6 = AddrFamily(C.AF_INET6)
pub const af_inet6_sdp = AddrFamily(C.AF_INET6_SDP)
pub const af_inet = AddrFamily(C.AF_INET)
pub const af_inet_sdp = AddrFamily(C.AF_INET_SDP)
pub const af_ipfwlog = AddrFamily(C.AF_IPFWLOG)
pub const af_ipx = AddrFamily(C.AF_IPX)
pub const af_isdn = AddrFamily(C.AF_ISDN)
pub const af_iso = AddrFamily(C.AF_ISO)
pub const af_lat = AddrFamily(C.AF_LAT)
pub const af_link = AddrFamily(C.AF_LINK)
pub const af_local = AddrFamily(C.AF_LOCAL)
pub const af_max = AddrFamily(C.AF_MAX)
pub const af_natm = AddrFamily(C.AF_NATM)
pub const af_netbios = AddrFamily(C.AF_NETBIOS)
pub const af_netgraph = AddrFamily(C.AF_NETGRAPH)
pub const af_netlink = AddrFamily(C.AF_NETLINK)
pub const af_osi = AddrFamily(C.AF_OSI)
pub const af_pup = AddrFamily(C.AF_PUP)
pub const af_route = AddrFamily(C.AF_ROUTE)
pub const af_scluster = AddrFamily(C.AF_SCLUSTER)
pub const af_sip = AddrFamily(C.AF_SIP)
pub const af_slow = AddrFamily(C.AF_SLOW)
pub const af_sna = AddrFamily(C.AF_SNA)
pub const af_unix = AddrFamily(C.AF_UNIX)
pub const af_unspec = AddrFamily(C.AF_UNSPEC)
pub const af_vendor00 = AddrFamily(C.AF_VENDOR00)
pub const af_vendor01 = AddrFamily(C.AF_VENDOR01)
pub const af_vendor03 = AddrFamily(C.AF_VENDOR03)
pub const af_vendor04 = AddrFamily(C.AF_VENDOR04)
pub const af_vendor05 = AddrFamily(C.AF_VENDOR05)
pub const af_vendor06 = AddrFamily(C.AF_VENDOR06)
pub const af_vendor07 = AddrFamily(C.AF_VENDOR07)
pub const af_vendor08 = AddrFamily(C.AF_VENDOR08)
pub const af_vendor09 = AddrFamily(C.AF_VENDOR09)
pub const af_vendor10 = AddrFamily(C.AF_VENDOR10)
pub const af_vendor11 = AddrFamily(C.AF_VENDOR11)
pub const af_vendor12 = AddrFamily(C.AF_VENDOR12)
pub const af_vendor13 = AddrFamily(C.AF_VENDOR13)
pub const af_vendor14 = AddrFamily(C.AF_VENDOR14)
pub const af_vendor15 = AddrFamily(C.AF_VENDOR15)
pub const af_vendor16 = AddrFamily(C.AF_VENDOR16)
pub const af_vendor17 = AddrFamily(C.AF_VENDOR17)
pub const af_vendor18 = AddrFamily(C.AF_VENDOR18)
pub const af_vendor19 = AddrFamily(C.AF_VENDOR19)
pub const af_vendor20 = AddrFamily(C.AF_VENDOR20)
pub const af_vendor21 = AddrFamily(C.AF_VENDOR21)
pub const af_vendor22 = AddrFamily(C.AF_VENDOR22)
pub const af_vendor23 = AddrFamily(C.AF_VENDOR23)
pub const af_vendor24 = AddrFamily(C.AF_VENDOR24)
pub const af_vendor25 = AddrFamily(C.AF_VENDOR25)
pub const af_vendor26 = AddrFamily(C.AF_VENDOR26)
pub const af_vendor27 = AddrFamily(C.AF_VENDOR27)
pub const af_vendor28 = AddrFamily(C.AF_VENDOR28)
pub const af_vendor29 = AddrFamily(C.AF_VENDOR29)
pub const af_vendor30 = AddrFamily(C.AF_VENDOR30)
pub const af_vendor31 = AddrFamily(C.AF_VENDOR31)
pub const af_vendor32 = AddrFamily(C.AF_VENDOR32)
pub const af_vendor33 = AddrFamily(C.AF_VENDOR33)
pub const af_vendor34 = AddrFamily(C.AF_VENDOR34)
pub const af_vendor35 = AddrFamily(C.AF_VENDOR35)
pub const af_vendor36 = AddrFamily(C.AF_VENDOR36)
pub const af_vendor37 = AddrFamily(C.AF_VENDOR37)
pub const af_vendor38 = AddrFamily(C.AF_VENDOR38)
pub const af_vendor39 = AddrFamily(C.AF_VENDOR39)
pub const af_vendor40 = AddrFamily(C.AF_VENDOR40)
pub const af_vendor41 = AddrFamily(C.AF_VENDOR41)
pub const af_vendor42 = AddrFamily(C.AF_VENDOR42)
pub const af_vendor43 = AddrFamily(C.AF_VENDOR43)
pub const af_vendor44 = AddrFamily(C.AF_VENDOR44)
pub const af_vendor45 = AddrFamily(C.AF_VENDOR45)
pub const af_vendor46 = AddrFamily(C.AF_VENDOR46)
pub const af_vendor47 = AddrFamily(C.AF_VENDOR47)
-56
View File
@@ -1,56 +0,0 @@
module netio
/*
Address families defined on Linux.
*/
pub const af_alg = AddrFamily(C.AF_ALG)
pub const af_appletalk = AddrFamily(C.AF_APPLETALK)
pub const af_ash = AddrFamily(C.AF_ASH)
pub const af_atmpvc = AddrFamily(C.AF_ATMPVC)
pub const af_atmsvc = AddrFamily(C.AF_ATMSVC)
pub const af_ax25 = AddrFamily(C.AF_AX25)
pub const af_bluetooth = AddrFamily(C.AF_BLUETOOTH)
pub const af_bridge = AddrFamily(C.AF_BRIDGE)
pub const af_caif = AddrFamily(C.AF_CAIF)
pub const af_can = AddrFamily(C.AF_CAN)
pub const af_decnet = AddrFamily(C.AF_DECnet)
pub const af_econet = AddrFamily(C.AF_ECONET)
pub const af_file = AddrFamily(C.AF_FILE)
pub const af_ib = AddrFamily(C.AF_IB)
pub const af_ieee802154 = AddrFamily(C.AF_IEEE802154)
pub const af_inet6 = AddrFamily(C.AF_INET6)
pub const af_inet = AddrFamily(C.AF_INET)
pub const af_ipx = AddrFamily(C.AF_IPX)
pub const af_irda = AddrFamily(C.AF_IRDA)
pub const af_isdn = AddrFamily(C.AF_ISDN)
pub const af_iucv = AddrFamily(C.AF_IUCV)
pub const af_kcm = AddrFamily(C.AF_KCM)
pub const af_key = AddrFamily(C.AF_KEY)
pub const af_llc = AddrFamily(C.AF_LLC)
pub const af_local = AddrFamily(C.AF_LOCAL)
pub const af_max = AddrFamily(C.AF_MAX)
pub const af_mctp = AddrFamily(C.AF_MCTP)
pub const af_mpls = AddrFamily(C.AF_MPLS)
pub const af_netbeui = AddrFamily(C.AF_NETBEUI)
pub const af_netlink = AddrFamily(C.AF_NETLINK)
pub const af_netrom = AddrFamily(C.AF_NETROM)
pub const af_nfc = AddrFamily(C.AF_NFC)
pub const af_packet = AddrFamily(C.AF_PACKET)
pub const af_phonet = AddrFamily(C.AF_PHONET)
pub const af_pppox = AddrFamily(C.AF_PPPOX)
pub const af_qipcrtr = AddrFamily(C.AF_QIPCRTR)
pub const af_rds = AddrFamily(C.AF_RDS)
pub const af_rose = AddrFamily(C.AF_ROSE)
pub const af_route = AddrFamily(C.AF_ROUTE)
pub const af_rxrpc = AddrFamily(C.AF_RXRPC)
pub const af_security = AddrFamily(C.AF_SECURITY)
pub const af_smc = AddrFamily(C.AF_SMC)
pub const af_sna = AddrFamily(C.AF_SNA)
pub const af_tipc = AddrFamily(C.AF_TIPC)
pub const af_unix = AddrFamily(C.AF_UNIX)
pub const af_unspec = AddrFamily(C.AF_UNSPEC)
pub const af_vsock = AddrFamily(C.AF_VSOCK)
pub const af_wanpipe = AddrFamily(C.AF_WANPIPE)
pub const af_x25 = AddrFamily(C.AF_X25)
pub const af_xdp = AddrFamily(C.AF_XDP)
-16
View File
@@ -1,16 +0,0 @@
module netio
/*
getaddrinfo(3) flags defined on FreeBSD.
*/
pub const ai_addrconfig = C.AI_ADDRCONFIG
pub const ai_all = C.AI_ALL
pub const ai_canonname = C.AI_CANONNAME
pub const ai_default = C.AI_DEFAULT
pub const ai_mask = C.AI_MASK
pub const ai_numerichost = C.AI_NUMERICHOST
pub const ai_numericserv = C.AI_NUMERICSERV
pub const ai_passive = C.AI_PASSIVE
pub const ai_v4mapped = C.AI_V4MAPPED
pub const ai_v4mapped_cfg = C.AI_V4MAPPED_CFG
-13
View File
@@ -1,13 +0,0 @@
module netio
/*
getaddrinfo(3) flags defined on Linux.
*/
pub const ai_addrconfig = C.AI_ADDRCONFIG
pub const ai_canonname = C.AI_CANONNAME
pub const ai_all = C.AI_ALL
pub const ai_v4mapped = C.AI_V4MAPPED
pub const ai_numericserv = C.AI_NUMERICSERV
pub const ai_passive = C.AI_PASSIVE
pub const ai_numerichost = C.AI_NUMERICHOST
+17
View File
@@ -0,0 +1,17 @@
module netio
/*
Common constants. Should work on most systems.
*/
pub const af_unspec = AddrFamily(C.AF_UNSPEC)
pub const af_unix = AddrFamily(C.AF_UNIX)
pub const af_inet = AddrFamily(C.AF_INET)
pub const af_inet6 = AddrFamily(C.AF_INET6)
pub const sock_stream = SocketType(C.SOCK_STREAM)
pub const sock_dgram = SocketType(C.SOCK_DGRAM)
pub const sock_seqpacket = SocketType(C.SOCK_SEQPACKET)
pub const sock_raw = SocketType(C.SOCK_RAW)
pub const sol_socket = SocketLevel(C.SOL_SOCKET)
+422
View File
@@ -0,0 +1,422 @@
module netio
/*
This file is generated by mkconst.sh, DO NOT EDIT.
*/
pub const af_appletalk = AddrFamily(C.AF_APPLETALK)
pub const af_arp = AddrFamily(C.AF_ARP)
pub const af_atm = AddrFamily(C.AF_ATM)
pub const af_bluetooth = AddrFamily(C.AF_BLUETOOTH)
pub const af_ccitt = AddrFamily(C.AF_CCITT)
pub const af_chaos = AddrFamily(C.AF_CHAOS)
pub const af_cnt = AddrFamily(C.AF_CNT)
pub const af_coip = AddrFamily(C.AF_COIP)
pub const af_datakit = AddrFamily(C.AF_DATAKIT)
pub const af_decnet = AddrFamily(C.AF_DECnet)
pub const af_divert = AddrFamily(C.AF_DIVERT)
pub const af_dli = AddrFamily(C.AF_DLI)
pub const af_e164 = AddrFamily(C.AF_E164)
pub const af_ecma = AddrFamily(C.AF_ECMA)
pub const af_hylink = AddrFamily(C.AF_HYLINK)
pub const af_hyperv = AddrFamily(C.AF_HYPERV)
pub const af_ieee80211 = AddrFamily(C.AF_IEEE80211)
pub const af_implink = AddrFamily(C.AF_IMPLINK)
pub const af_inet6 = AddrFamily(C.AF_INET6)
pub const af_inet6_sdp = AddrFamily(C.AF_INET6_SDP)
pub const af_inet = AddrFamily(C.AF_INET)
pub const af_inet_sdp = AddrFamily(C.AF_INET_SDP)
pub const af_ipfwlog = AddrFamily(C.AF_IPFWLOG)
pub const af_ipx = AddrFamily(C.AF_IPX)
pub const af_isdn = AddrFamily(C.AF_ISDN)
pub const af_iso = AddrFamily(C.AF_ISO)
pub const af_lat = AddrFamily(C.AF_LAT)
pub const af_link = AddrFamily(C.AF_LINK)
pub const af_local = AddrFamily(C.AF_LOCAL)
pub const af_max = AddrFamily(C.AF_MAX)
pub const af_natm = AddrFamily(C.AF_NATM)
pub const af_netbios = AddrFamily(C.AF_NETBIOS)
pub const af_netgraph = AddrFamily(C.AF_NETGRAPH)
pub const af_netlink = AddrFamily(C.AF_NETLINK)
pub const af_osi = AddrFamily(C.AF_OSI)
pub const af_pup = AddrFamily(C.AF_PUP)
pub const af_route = AddrFamily(C.AF_ROUTE)
pub const af_scluster = AddrFamily(C.AF_SCLUSTER)
pub const af_sip = AddrFamily(C.AF_SIP)
pub const af_slow = AddrFamily(C.AF_SLOW)
pub const af_sna = AddrFamily(C.AF_SNA)
pub const af_unix = AddrFamily(C.AF_UNIX)
pub const af_unspec = AddrFamily(C.AF_UNSPEC)
pub const af_vendor00 = AddrFamily(C.AF_VENDOR00)
pub const af_vendor01 = AddrFamily(C.AF_VENDOR01)
pub const af_vendor03 = AddrFamily(C.AF_VENDOR03)
pub const af_vendor04 = AddrFamily(C.AF_VENDOR04)
pub const af_vendor05 = AddrFamily(C.AF_VENDOR05)
pub const af_vendor06 = AddrFamily(C.AF_VENDOR06)
pub const af_vendor07 = AddrFamily(C.AF_VENDOR07)
pub const af_vendor08 = AddrFamily(C.AF_VENDOR08)
pub const af_vendor09 = AddrFamily(C.AF_VENDOR09)
pub const af_vendor10 = AddrFamily(C.AF_VENDOR10)
pub const af_vendor11 = AddrFamily(C.AF_VENDOR11)
pub const af_vendor12 = AddrFamily(C.AF_VENDOR12)
pub const af_vendor13 = AddrFamily(C.AF_VENDOR13)
pub const af_vendor14 = AddrFamily(C.AF_VENDOR14)
pub const af_vendor15 = AddrFamily(C.AF_VENDOR15)
pub const af_vendor16 = AddrFamily(C.AF_VENDOR16)
pub const af_vendor17 = AddrFamily(C.AF_VENDOR17)
pub const af_vendor18 = AddrFamily(C.AF_VENDOR18)
pub const af_vendor19 = AddrFamily(C.AF_VENDOR19)
pub const af_vendor20 = AddrFamily(C.AF_VENDOR20)
pub const af_vendor21 = AddrFamily(C.AF_VENDOR21)
pub const af_vendor22 = AddrFamily(C.AF_VENDOR22)
pub const af_vendor23 = AddrFamily(C.AF_VENDOR23)
pub const af_vendor24 = AddrFamily(C.AF_VENDOR24)
pub const af_vendor25 = AddrFamily(C.AF_VENDOR25)
pub const af_vendor26 = AddrFamily(C.AF_VENDOR26)
pub const af_vendor27 = AddrFamily(C.AF_VENDOR27)
pub const af_vendor28 = AddrFamily(C.AF_VENDOR28)
pub const af_vendor29 = AddrFamily(C.AF_VENDOR29)
pub const af_vendor30 = AddrFamily(C.AF_VENDOR30)
pub const af_vendor31 = AddrFamily(C.AF_VENDOR31)
pub const af_vendor32 = AddrFamily(C.AF_VENDOR32)
pub const af_vendor33 = AddrFamily(C.AF_VENDOR33)
pub const af_vendor34 = AddrFamily(C.AF_VENDOR34)
pub const af_vendor35 = AddrFamily(C.AF_VENDOR35)
pub const af_vendor36 = AddrFamily(C.AF_VENDOR36)
pub const af_vendor37 = AddrFamily(C.AF_VENDOR37)
pub const af_vendor38 = AddrFamily(C.AF_VENDOR38)
pub const af_vendor39 = AddrFamily(C.AF_VENDOR39)
pub const af_vendor40 = AddrFamily(C.AF_VENDOR40)
pub const af_vendor41 = AddrFamily(C.AF_VENDOR41)
pub const af_vendor42 = AddrFamily(C.AF_VENDOR42)
pub const af_vendor43 = AddrFamily(C.AF_VENDOR43)
pub const af_vendor44 = AddrFamily(C.AF_VENDOR44)
pub const af_vendor45 = AddrFamily(C.AF_VENDOR45)
pub const af_vendor46 = AddrFamily(C.AF_VENDOR46)
pub const af_vendor47 = AddrFamily(C.AF_VENDOR47)
pub const ai_addrconfig = AddrInfoFlag(C.AI_ADDRCONFIG)
pub const ai_all = AddrInfoFlag(C.AI_ALL)
pub const ai_canonname = AddrInfoFlag(C.AI_CANONNAME)
pub const ai_default = AddrInfoFlag(C.AI_DEFAULT)
pub const ai_mask = AddrInfoFlag(C.AI_MASK)
pub const ai_numerichost = AddrInfoFlag(C.AI_NUMERICHOST)
pub const ai_numericserv = AddrInfoFlag(C.AI_NUMERICSERV)
pub const ai_passive = AddrInfoFlag(C.AI_PASSIVE)
pub const ai_v4mapped = AddrInfoFlag(C.AI_V4MAPPED)
pub const ai_v4mapped_cfg = AddrInfoFlag(C.AI_V4MAPPED_CFG)
pub const ipproto_3pc = SocketLevel(C.IPPROTO_3PC)
pub const ipproto_adfs = SocketLevel(C.IPPROTO_ADFS)
pub const ipproto_ahip = SocketLevel(C.IPPROTO_AHIP)
pub const ipproto_ah = SocketLevel(C.IPPROTO_AH)
pub const ipproto_apes = SocketLevel(C.IPPROTO_APES)
pub const ipproto_argus = SocketLevel(C.IPPROTO_ARGUS)
pub const ipproto_ax25 = SocketLevel(C.IPPROTO_AX25)
pub const ipproto_bha = SocketLevel(C.IPPROTO_BHA)
pub const ipproto_blt = SocketLevel(C.IPPROTO_BLT)
pub const ipproto_brsatmon = SocketLevel(C.IPPROTO_BRSATMON)
pub const ipproto_carp = SocketLevel(C.IPPROTO_CARP)
pub const ipproto_cftp = SocketLevel(C.IPPROTO_CFTP)
pub const ipproto_chaos = SocketLevel(C.IPPROTO_CHAOS)
pub const ipproto_cmtp = SocketLevel(C.IPPROTO_CMTP)
pub const ipproto_cphb = SocketLevel(C.IPPROTO_CPHB)
pub const ipproto_cpnx = SocketLevel(C.IPPROTO_CPNX)
pub const ipproto_dccp = SocketLevel(C.IPPROTO_DCCP)
pub const ipproto_ddp = SocketLevel(C.IPPROTO_DDP)
pub const ipproto_dgp = SocketLevel(C.IPPROTO_DGP)
pub const ipproto_divert = SocketLevel(C.IPPROTO_DIVERT)
pub const ipproto_done = SocketLevel(C.IPPROTO_DONE)
pub const ipproto_dstopts = SocketLevel(C.IPPROTO_DSTOPTS)
pub const ipproto_egp = SocketLevel(C.IPPROTO_EGP)
pub const ipproto_emcon = SocketLevel(C.IPPROTO_EMCON)
pub const ipproto_encap = SocketLevel(C.IPPROTO_ENCAP)
pub const ipproto_eon = SocketLevel(C.IPPROTO_EON)
pub const ipproto_esp = SocketLevel(C.IPPROTO_ESP)
pub const ipproto_etherip = SocketLevel(C.IPPROTO_ETHERIP)
pub const ipproto_fragment = SocketLevel(C.IPPROTO_FRAGMENT)
pub const ipproto_ggp = SocketLevel(C.IPPROTO_GGP)
pub const ipproto_gmtp = SocketLevel(C.IPPROTO_GMTP)
pub const ipproto_gre = SocketLevel(C.IPPROTO_GRE)
pub const ipproto_hello = SocketLevel(C.IPPROTO_HELLO)
pub const ipproto_hip = SocketLevel(C.IPPROTO_HIP)
pub const ipproto_hmp = SocketLevel(C.IPPROTO_HMP)
pub const ipproto_hopopts = SocketLevel(C.IPPROTO_HOPOPTS)
pub const ipproto_icmpv6 = SocketLevel(C.IPPROTO_ICMPV6)
pub const ipproto_icmp = SocketLevel(C.IPPROTO_ICMP)
pub const ipproto_idpr = SocketLevel(C.IPPROTO_IDPR)
pub const ipproto_idp = SocketLevel(C.IPPROTO_IDP)
pub const ipproto_idrp = SocketLevel(C.IPPROTO_IDRP)
pub const ipproto_igmp = SocketLevel(C.IPPROTO_IGMP)
pub const ipproto_igp = SocketLevel(C.IPPROTO_IGP)
pub const ipproto_igrp = SocketLevel(C.IPPROTO_IGRP)
pub const ipproto_il = SocketLevel(C.IPPROTO_IL)
pub const ipproto_inlsp = SocketLevel(C.IPPROTO_INLSP)
pub const ipproto_inp = SocketLevel(C.IPPROTO_INP)
pub const ipproto_ipcomp = SocketLevel(C.IPPROTO_IPCOMP)
pub const ipproto_ipcv = SocketLevel(C.IPPROTO_IPCV)
pub const ipproto_ipeip = SocketLevel(C.IPPROTO_IPEIP)
pub const ipproto_ipip = SocketLevel(C.IPPROTO_IPIP)
pub const ipproto_ippc = SocketLevel(C.IPPROTO_IPPC)
pub const ipproto_ipv4 = SocketLevel(C.IPPROTO_IPV4)
pub const ipproto_ipv6 = SocketLevel(C.IPPROTO_IPV6)
pub const ipproto_ip = SocketLevel(C.IPPROTO_IP)
pub const ipproto_irtp = SocketLevel(C.IPPROTO_IRTP)
pub const ipproto_kryptolan = SocketLevel(C.IPPROTO_KRYPTOLAN)
pub const ipproto_larp = SocketLevel(C.IPPROTO_LARP)
pub const ipproto_leaf1 = SocketLevel(C.IPPROTO_LEAF1)
pub const ipproto_leaf2 = SocketLevel(C.IPPROTO_LEAF2)
pub const ipproto_max = SocketLevel(C.IPPROTO_MAX)
pub const ipproto_meas = SocketLevel(C.IPPROTO_MEAS)
pub const ipproto_mhrp = SocketLevel(C.IPPROTO_MHRP)
pub const ipproto_mh = SocketLevel(C.IPPROTO_MH)
pub const ipproto_micp = SocketLevel(C.IPPROTO_MICP)
pub const ipproto_mobile = SocketLevel(C.IPPROTO_MOBILE)
pub const ipproto_mpls = SocketLevel(C.IPPROTO_MPLS)
pub const ipproto_mtp = SocketLevel(C.IPPROTO_MTP)
pub const ipproto_mux = SocketLevel(C.IPPROTO_MUX)
pub const ipproto_nd = SocketLevel(C.IPPROTO_ND)
pub const ipproto_nhrp = SocketLevel(C.IPPROTO_NHRP)
pub const ipproto_none = SocketLevel(C.IPPROTO_NONE)
pub const ipproto_nsp = SocketLevel(C.IPPROTO_NSP)
pub const ipproto_nvpii = SocketLevel(C.IPPROTO_NVPII)
pub const ipproto_old_divert = SocketLevel(C.IPPROTO_OLD_DIVERT)
pub const ipproto_ospfigp = SocketLevel(C.IPPROTO_OSPFIGP)
pub const ipproto_pfsync = SocketLevel(C.IPPROTO_PFSYNC)
pub const ipproto_pgm = SocketLevel(C.IPPROTO_PGM)
pub const ipproto_pigp = SocketLevel(C.IPPROTO_PIGP)
pub const ipproto_pim = SocketLevel(C.IPPROTO_PIM)
pub const ipproto_prm = SocketLevel(C.IPPROTO_PRM)
pub const ipproto_pup = SocketLevel(C.IPPROTO_PUP)
pub const ipproto_pvp = SocketLevel(C.IPPROTO_PVP)
pub const ipproto_raw = SocketLevel(C.IPPROTO_RAW)
pub const ipproto_rccmon = SocketLevel(C.IPPROTO_RCCMON)
pub const ipproto_rdp = SocketLevel(C.IPPROTO_RDP)
pub const ipproto_reserved_253 = SocketLevel(C.IPPROTO_RESERVED_253)
pub const ipproto_reserved_254 = SocketLevel(C.IPPROTO_RESERVED_254)
pub const ipproto_routing = SocketLevel(C.IPPROTO_ROUTING)
pub const ipproto_rsvp = SocketLevel(C.IPPROTO_RSVP)
pub const ipproto_rvd = SocketLevel(C.IPPROTO_RVD)
pub const ipproto_satexpak = SocketLevel(C.IPPROTO_SATEXPAK)
pub const ipproto_satmon = SocketLevel(C.IPPROTO_SATMON)
pub const ipproto_sccsp = SocketLevel(C.IPPROTO_SCCSP)
pub const ipproto_sctp = SocketLevel(C.IPPROTO_SCTP)
pub const ipproto_sdrp = SocketLevel(C.IPPROTO_SDRP)
pub const ipproto_send = SocketLevel(C.IPPROTO_SEND)
pub const ipproto_shim6 = SocketLevel(C.IPPROTO_SHIM6)
pub const ipproto_skip = SocketLevel(C.IPPROTO_SKIP)
pub const ipproto_spacer = SocketLevel(C.IPPROTO_SPACER)
pub const ipproto_srpc = SocketLevel(C.IPPROTO_SRPC)
pub const ipproto_st = SocketLevel(C.IPPROTO_ST)
pub const ipproto_svmtp = SocketLevel(C.IPPROTO_SVMTP)
pub const ipproto_swipe = SocketLevel(C.IPPROTO_SWIPE)
pub const ipproto_tcf = SocketLevel(C.IPPROTO_TCF)
pub const ipproto_tcp = SocketLevel(C.IPPROTO_TCP)
pub const ipproto_tlsp = SocketLevel(C.IPPROTO_TLSP)
pub const ipproto_tpxx = SocketLevel(C.IPPROTO_TPXX)
pub const ipproto_tp = SocketLevel(C.IPPROTO_TP)
pub const ipproto_trunk1 = SocketLevel(C.IPPROTO_TRUNK1)
pub const ipproto_trunk2 = SocketLevel(C.IPPROTO_TRUNK2)
pub const ipproto_ttp = SocketLevel(C.IPPROTO_TTP)
pub const ipproto_udplite = SocketLevel(C.IPPROTO_UDPLITE)
pub const ipproto_udp = SocketLevel(C.IPPROTO_UDP)
pub const ipproto_vines = SocketLevel(C.IPPROTO_VINES)
pub const ipproto_visa = SocketLevel(C.IPPROTO_VISA)
pub const ipproto_vmtp = SocketLevel(C.IPPROTO_VMTP)
pub const ipproto_wbexpak = SocketLevel(C.IPPROTO_WBEXPAK)
pub const ipproto_wbmon = SocketLevel(C.IPPROTO_WBMON)
pub const ipproto_wsn = SocketLevel(C.IPPROTO_WSN)
pub const ipproto_xnet = SocketLevel(C.IPPROTO_XNET)
pub const ipproto_xtp = SocketLevel(C.IPPROTO_XTP)
pub const ipv6_autoflowlabel = SocketOption(C.IPV6_AUTOFLOWLABEL)
pub const ipv6_bindany = SocketOption(C.IPV6_BINDANY)
pub const ipv6_bindv6only = SocketOption(C.IPV6_BINDV6ONLY)
pub const ipv6_checksum = SocketOption(C.IPV6_CHECKSUM)
pub const ipv6_default_multicast_hops = SocketOption(C.IPV6_DEFAULT_MULTICAST_HOPS)
pub const ipv6_default_multicast_loop = SocketOption(C.IPV6_DEFAULT_MULTICAST_LOOP)
pub const ipv6_dontfrag = SocketOption(C.IPV6_DONTFRAG)
pub const ipv6_dstopts = SocketOption(C.IPV6_DSTOPTS)
pub const ipv6_flowid = SocketOption(C.IPV6_FLOWID)
pub const ipv6_flowtype = SocketOption(C.IPV6_FLOWTYPE)
pub const ipv6_fw_add = SocketOption(C.IPV6_FW_ADD)
pub const ipv6_fw_del = SocketOption(C.IPV6_FW_DEL)
pub const ipv6_fw_flush = SocketOption(C.IPV6_FW_FLUSH)
pub const ipv6_fw_get = SocketOption(C.IPV6_FW_GET)
pub const ipv6_fw_zero = SocketOption(C.IPV6_FW_ZERO)
pub const ipv6_hoplimit = SocketOption(C.IPV6_HOPLIMIT)
pub const ipv6_hopopts = SocketOption(C.IPV6_HOPOPTS)
pub const ipv6_ipsec_policy = SocketOption(C.IPV6_IPSEC_POLICY)
pub const ipv6_join_group = SocketOption(C.IPV6_JOIN_GROUP)
pub const ipv6_leave_group = SocketOption(C.IPV6_LEAVE_GROUP)
pub const ipv6_max_group_src_filter = SocketOption(C.IPV6_MAX_GROUP_SRC_FILTER)
pub const ipv6_max_memberships = SocketOption(C.IPV6_MAX_MEMBERSHIPS)
pub const ipv6_max_sock_src_filter = SocketOption(C.IPV6_MAX_SOCK_SRC_FILTER)
pub const ipv6_msfilter = SocketOption(C.IPV6_MSFILTER)
pub const ipv6_multicast_hops = SocketOption(C.IPV6_MULTICAST_HOPS)
pub const ipv6_multicast_if = SocketOption(C.IPV6_MULTICAST_IF)
pub const ipv6_multicast_loop = SocketOption(C.IPV6_MULTICAST_LOOP)
pub const ipv6_nexthop = SocketOption(C.IPV6_NEXTHOP)
pub const ipv6_origdstaddr = SocketOption(C.IPV6_ORIGDSTADDR)
pub const ipv6_pathmtu = SocketOption(C.IPV6_PATHMTU)
pub const ipv6_pktinfo = SocketOption(C.IPV6_PKTINFO)
pub const ipv6_portrange = SocketOption(C.IPV6_PORTRANGE)
pub const ipv6_portrange_default = SocketOption(C.IPV6_PORTRANGE_DEFAULT)
pub const ipv6_portrange_high = SocketOption(C.IPV6_PORTRANGE_HIGH)
pub const ipv6_portrange_low = SocketOption(C.IPV6_PORTRANGE_LOW)
pub const ipv6_prefer_tempaddr = SocketOption(C.IPV6_PREFER_TEMPADDR)
pub const ipv6_recvdstopts = SocketOption(C.IPV6_RECVDSTOPTS)
pub const ipv6_recvflowid = SocketOption(C.IPV6_RECVFLOWID)
pub const ipv6_recvhoplimit = SocketOption(C.IPV6_RECVHOPLIMIT)
pub const ipv6_recvhopopts = SocketOption(C.IPV6_RECVHOPOPTS)
pub const ipv6_recvorigdstaddr = SocketOption(C.IPV6_RECVORIGDSTADDR)
pub const ipv6_recvpathmtu = SocketOption(C.IPV6_RECVPATHMTU)
pub const ipv6_recvpktinfo = SocketOption(C.IPV6_RECVPKTINFO)
pub const ipv6_recvrssbucketid = SocketOption(C.IPV6_RECVRSSBUCKETID)
pub const ipv6_recvrthdr = SocketOption(C.IPV6_RECVRTHDR)
pub const ipv6_recvtclass = SocketOption(C.IPV6_RECVTCLASS)
pub const ipv6_rssbucketid = SocketOption(C.IPV6_RSSBUCKETID)
pub const ipv6_rthdrdstopts = SocketOption(C.IPV6_RTHDRDSTOPTS)
pub const ipv6_rthdr = SocketOption(C.IPV6_RTHDR)
pub const ipv6_rthdr_loose = SocketOption(C.IPV6_RTHDR_LOOSE)
pub const ipv6_rthdr_strict = SocketOption(C.IPV6_RTHDR_STRICT)
pub const ipv6_rthdr_type_0 = SocketOption(C.IPV6_RTHDR_TYPE_0)
pub const ipv6_sockopt_reserved1 = SocketOption(C.IPV6_SOCKOPT_RESERVED1)
pub const ipv6_tclass = SocketOption(C.IPV6_TCLASS)
pub const ipv6_unicast_hops = SocketOption(C.IPV6_UNICAST_HOPS)
pub const ipv6_use_min_mtu = SocketOption(C.IPV6_USE_MIN_MTU)
pub const ipv6_v6only = SocketOption(C.IPV6_V6ONLY)
pub const ipv6_vlan_pcp = SocketOption(C.IPV6_VLAN_PCP)
pub const ip_add_membership = SocketOption(C.IP_ADD_MEMBERSHIP)
pub const ip_add_source_membership = SocketOption(C.IP_ADD_SOURCE_MEMBERSHIP)
pub const ip_bindany = SocketOption(C.IP_BINDANY)
pub const ip_block_source = SocketOption(C.IP_BLOCK_SOURCE)
pub const ip_default_multicast_loop = SocketOption(C.IP_DEFAULT_MULTICAST_LOOP)
pub const ip_default_multicast_ttl = SocketOption(C.IP_DEFAULT_MULTICAST_TTL)
pub const ip_dontfrag = SocketOption(C.IP_DONTFRAG)
pub const ip_drop_membership = SocketOption(C.IP_DROP_MEMBERSHIP)
pub const ip_drop_source_membership = SocketOption(C.IP_DROP_SOURCE_MEMBERSHIP)
pub const ip_dummynet3 = SocketOption(C.IP_DUMMYNET3)
pub const ip_dummynet_configure = SocketOption(C.IP_DUMMYNET_CONFIGURE)
pub const ip_dummynet_del = SocketOption(C.IP_DUMMYNET_DEL)
pub const ip_dummynet_flush = SocketOption(C.IP_DUMMYNET_FLUSH)
pub const ip_dummynet_get = SocketOption(C.IP_DUMMYNET_GET)
pub const ip_flowid = SocketOption(C.IP_FLOWID)
pub const ip_flowtype = SocketOption(C.IP_FLOWTYPE)
pub const ip_fw3 = SocketOption(C.IP_FW3)
pub const ip_fw_add = SocketOption(C.IP_FW_ADD)
pub const ip_fw_del = SocketOption(C.IP_FW_DEL)
pub const ip_fw_flush = SocketOption(C.IP_FW_FLUSH)
pub const ip_fw_get = SocketOption(C.IP_FW_GET)
pub const ip_fw_nat_cfg = SocketOption(C.IP_FW_NAT_CFG)
pub const ip_fw_nat_del = SocketOption(C.IP_FW_NAT_DEL)
pub const ip_fw_nat_get_config = SocketOption(C.IP_FW_NAT_GET_CONFIG)
pub const ip_fw_nat_get_log = SocketOption(C.IP_FW_NAT_GET_LOG)
pub const ip_fw_resetlog = SocketOption(C.IP_FW_RESETLOG)
pub const ip_fw_table_add = SocketOption(C.IP_FW_TABLE_ADD)
pub const ip_fw_table_del = SocketOption(C.IP_FW_TABLE_DEL)
pub const ip_fw_table_flush = SocketOption(C.IP_FW_TABLE_FLUSH)
pub const ip_fw_table_getsize = SocketOption(C.IP_FW_TABLE_GETSIZE)
pub const ip_fw_table_list = SocketOption(C.IP_FW_TABLE_LIST)
pub const ip_fw_zero = SocketOption(C.IP_FW_ZERO)
pub const ip_hdrincl = SocketOption(C.IP_HDRINCL)
pub const ip_ipsec_policy = SocketOption(C.IP_IPSEC_POLICY)
pub const ip_max_group_src_filter = SocketOption(C.IP_MAX_GROUP_SRC_FILTER)
pub const ip_max_memberships = SocketOption(C.IP_MAX_MEMBERSHIPS)
pub const ip_max_sock_mute_filter = SocketOption(C.IP_MAX_SOCK_MUTE_FILTER)
pub const ip_max_sock_src_filter = SocketOption(C.IP_MAX_SOCK_SRC_FILTER)
pub const ip_minttl = SocketOption(C.IP_MINTTL)
pub const ip_msfilter = SocketOption(C.IP_MSFILTER)
pub const ip_multicast_if = SocketOption(C.IP_MULTICAST_IF)
pub const ip_multicast_loop = SocketOption(C.IP_MULTICAST_LOOP)
pub const ip_multicast_ttl = SocketOption(C.IP_MULTICAST_TTL)
pub const ip_multicast_vif = SocketOption(C.IP_MULTICAST_VIF)
pub const ip_onesbcast = SocketOption(C.IP_ONESBCAST)
pub const ip_options = SocketOption(C.IP_OPTIONS)
pub const ip_origdstaddr = SocketOption(C.IP_ORIGDSTADDR)
pub const ip_portrange = SocketOption(C.IP_PORTRANGE)
pub const ip_portrange_default = SocketOption(C.IP_PORTRANGE_DEFAULT)
pub const ip_portrange_high = SocketOption(C.IP_PORTRANGE_HIGH)
pub const ip_portrange_low = SocketOption(C.IP_PORTRANGE_LOW)
pub const ip_recvdstaddr = SocketOption(C.IP_RECVDSTADDR)
pub const ip_recvflowid = SocketOption(C.IP_RECVFLOWID)
pub const ip_recvif = SocketOption(C.IP_RECVIF)
pub const ip_recvopts = SocketOption(C.IP_RECVOPTS)
pub const ip_recvorigdstaddr = SocketOption(C.IP_RECVORIGDSTADDR)
pub const ip_recvretopts = SocketOption(C.IP_RECVRETOPTS)
pub const ip_recvrssbucketid = SocketOption(C.IP_RECVRSSBUCKETID)
pub const ip_recvtos = SocketOption(C.IP_RECVTOS)
pub const ip_recvttl = SocketOption(C.IP_RECVTTL)
pub const ip_retopts = SocketOption(C.IP_RETOPTS)
pub const ip_rssbucketid = SocketOption(C.IP_RSSBUCKETID)
pub const ip_rsvp_off = SocketOption(C.IP_RSVP_OFF)
pub const ip_rsvp_on = SocketOption(C.IP_RSVP_ON)
pub const ip_rsvp_vif_off = SocketOption(C.IP_RSVP_VIF_OFF)
pub const ip_rsvp_vif_on = SocketOption(C.IP_RSVP_VIF_ON)
pub const ip_sendsrcaddr = SocketOption(C.IP_SENDSRCADDR)
pub const ip_tos = SocketOption(C.IP_TOS)
pub const ip_ttl = SocketOption(C.IP_TTL)
pub const ip_unblock_source = SocketOption(C.IP_UNBLOCK_SOURCE)
pub const ip_vlan_pcp = SocketOption(C.IP_VLAN_PCP)
pub const ni_dgram = NameInfoFlag(C.NI_DGRAM)
pub const ni_maxhost = NameInfoFlag(C.NI_MAXHOST)
pub const ni_maxserv = NameInfoFlag(C.NI_MAXSERV)
pub const ni_namereqd = NameInfoFlag(C.NI_NAMEREQD)
pub const ni_nofqdn = NameInfoFlag(C.NI_NOFQDN)
pub const ni_numerichost = NameInfoFlag(C.NI_NUMERICHOST)
pub const ni_numericscope = NameInfoFlag(C.NI_NUMERICSCOPE)
pub const ni_numericserv = NameInfoFlag(C.NI_NUMERICSERV)
pub const sock_cloexec = SocketType(C.SOCK_CLOEXEC)
pub const sock_clofork = SocketType(C.SOCK_CLOFORK)
pub const sock_dgram = SocketType(C.SOCK_DGRAM)
pub const sock_maxaddrlen = SocketType(C.SOCK_MAXADDRLEN)
pub const sock_nonblock = SocketType(C.SOCK_NONBLOCK)
pub const sock_raw = SocketType(C.SOCK_RAW)
pub const sock_rdm = SocketType(C.SOCK_RDM)
pub const sock_seqpacket = SocketType(C.SOCK_SEQPACKET)
pub const sock_stream = SocketType(C.SOCK_STREAM)
pub const sol_socket = SocketLevel(C.SOL_SOCKET)
pub const so_acceptconn = SocketOption(C.SO_ACCEPTCONN)
pub const so_acceptfilter = SocketOption(C.SO_ACCEPTFILTER)
pub const so_bintime = SocketOption(C.SO_BINTIME)
pub const so_broadcast = SocketOption(C.SO_BROADCAST)
pub const so_debug = SocketOption(C.SO_DEBUG)
pub const so_domain = SocketOption(C.SO_DOMAIN)
pub const so_dontroute = SocketOption(C.SO_DONTROUTE)
pub const so_error = SocketOption(C.SO_ERROR)
pub const so_fib = SocketOption(C.SO_FIB)
pub const so_keepalive = SocketOption(C.SO_KEEPALIVE)
pub const so_label = SocketOption(C.SO_LABEL)
pub const so_linger = SocketOption(C.SO_LINGER)
pub const so_listenincqlen = SocketOption(C.SO_LISTENINCQLEN)
pub const so_listenqlen = SocketOption(C.SO_LISTENQLEN)
pub const so_listenqlimit = SocketOption(C.SO_LISTENQLIMIT)
pub const so_max_pacing_rate = SocketOption(C.SO_MAX_PACING_RATE)
pub const so_nosigpipe = SocketOption(C.SO_NOSIGPIPE)
pub const so_no_ddp = SocketOption(C.SO_NO_DDP)
pub const so_no_offload = SocketOption(C.SO_NO_OFFLOAD)
pub const so_oobinline = SocketOption(C.SO_OOBINLINE)
pub const so_peerlabel = SocketOption(C.SO_PEERLABEL)
pub const so_protocol = SocketOption(C.SO_PROTOCOL)
pub const so_prototype = SocketOption(C.SO_PROTOTYPE)
pub const so_rcvbuf = SocketOption(C.SO_RCVBUF)
pub const so_rcvlowat = SocketOption(C.SO_RCVLOWAT)
pub const so_rcvtimeo = SocketOption(C.SO_RCVTIMEO)
pub const so_rerror = SocketOption(C.SO_RERROR)
pub const so_reuseaddr = SocketOption(C.SO_REUSEADDR)
pub const so_reuseport = SocketOption(C.SO_REUSEPORT)
pub const so_reuseport_lb = SocketOption(C.SO_REUSEPORT_LB)
pub const so_setfib = SocketOption(C.SO_SETFIB)
pub const so_sndbuf = SocketOption(C.SO_SNDBUF)
pub const so_sndlowat = SocketOption(C.SO_SNDLOWAT)
pub const so_sndtimeo = SocketOption(C.SO_SNDTIMEO)
pub const so_splice = SocketOption(C.SO_SPLICE)
pub const so_timestamp = SocketOption(C.SO_TIMESTAMP)
pub const so_ts_bintime = SocketOption(C.SO_TS_BINTIME)
pub const so_ts_clock = SocketOption(C.SO_TS_CLOCK)
pub const so_ts_clock_max = SocketOption(C.SO_TS_CLOCK_MAX)
pub const so_ts_default = SocketOption(C.SO_TS_DEFAULT)
pub const so_ts_monotonic = SocketOption(C.SO_TS_MONOTONIC)
pub const so_ts_realtime = SocketOption(C.SO_TS_REALTIME)
pub const so_ts_realtime_micro = SocketOption(C.SO_TS_REALTIME_MICRO)
pub const so_type = SocketOption(C.SO_TYPE)
pub const so_useloopback = SocketOption(C.SO_USELOOPBACK)
pub const so_user_cookie = SocketOption(C.SO_USER_COOKIE)
pub const so_vendor = SocketOption(C.SO_VENDOR)
+354
View File
@@ -0,0 +1,354 @@
module netio
/*
This file is generated by mkconst.sh, DO NOT EDIT.
*/
pub const af_alg = AddrFamily(C.AF_ALG)
pub const af_appletalk = AddrFamily(C.AF_APPLETALK)
pub const af_ash = AddrFamily(C.AF_ASH)
pub const af_atmpvc = AddrFamily(C.AF_ATMPVC)
pub const af_atmsvc = AddrFamily(C.AF_ATMSVC)
pub const af_ax25 = AddrFamily(C.AF_AX25)
pub const af_bluetooth = AddrFamily(C.AF_BLUETOOTH)
pub const af_bridge = AddrFamily(C.AF_BRIDGE)
pub const af_caif = AddrFamily(C.AF_CAIF)
pub const af_can = AddrFamily(C.AF_CAN)
pub const af_decnet = AddrFamily(C.AF_DECnet)
pub const af_econet = AddrFamily(C.AF_ECONET)
pub const af_file = AddrFamily(C.AF_FILE)
pub const af_ib = AddrFamily(C.AF_IB)
pub const af_ieee802154 = AddrFamily(C.AF_IEEE802154)
pub const af_inet6 = AddrFamily(C.AF_INET6)
pub const af_inet = AddrFamily(C.AF_INET)
pub const af_ipx = AddrFamily(C.AF_IPX)
pub const af_irda = AddrFamily(C.AF_IRDA)
pub const af_isdn = AddrFamily(C.AF_ISDN)
pub const af_iucv = AddrFamily(C.AF_IUCV)
pub const af_kcm = AddrFamily(C.AF_KCM)
pub const af_key = AddrFamily(C.AF_KEY)
pub const af_llc = AddrFamily(C.AF_LLC)
pub const af_local = AddrFamily(C.AF_LOCAL)
pub const af_max = AddrFamily(C.AF_MAX)
pub const af_mctp = AddrFamily(C.AF_MCTP)
pub const af_mpls = AddrFamily(C.AF_MPLS)
pub const af_netbeui = AddrFamily(C.AF_NETBEUI)
pub const af_netlink = AddrFamily(C.AF_NETLINK)
pub const af_netrom = AddrFamily(C.AF_NETROM)
pub const af_nfc = AddrFamily(C.AF_NFC)
pub const af_packet = AddrFamily(C.AF_PACKET)
pub const af_phonet = AddrFamily(C.AF_PHONET)
pub const af_pppox = AddrFamily(C.AF_PPPOX)
pub const af_qipcrtr = AddrFamily(C.AF_QIPCRTR)
pub const af_rds = AddrFamily(C.AF_RDS)
pub const af_rose = AddrFamily(C.AF_ROSE)
pub const af_route = AddrFamily(C.AF_ROUTE)
pub const af_rxrpc = AddrFamily(C.AF_RXRPC)
pub const af_security = AddrFamily(C.AF_SECURITY)
pub const af_smc = AddrFamily(C.AF_SMC)
pub const af_sna = AddrFamily(C.AF_SNA)
pub const af_tipc = AddrFamily(C.AF_TIPC)
pub const af_unix = AddrFamily(C.AF_UNIX)
pub const af_unspec = AddrFamily(C.AF_UNSPEC)
pub const af_vsock = AddrFamily(C.AF_VSOCK)
pub const af_wanpipe = AddrFamily(C.AF_WANPIPE)
pub const af_x25 = AddrFamily(C.AF_X25)
pub const af_xdp = AddrFamily(C.AF_XDP)
pub const ai_addrconfig = AddrInfoFlag(C.AI_ADDRCONFIG)
pub const ai_all = AddrInfoFlag(C.AI_ALL)
pub const ai_canonname = AddrInfoFlag(C.AI_CANONNAME)
pub const ai_numerichost = AddrInfoFlag(C.AI_NUMERICHOST)
pub const ai_numericserv = AddrInfoFlag(C.AI_NUMERICSERV)
pub const ai_passive = AddrInfoFlag(C.AI_PASSIVE)
pub const ai_v4mapped = AddrInfoFlag(C.AI_V4MAPPED)
pub const ipproto_ah = SocketLevel(C.IPPROTO_AH)
pub const ipproto_beetph = SocketLevel(C.IPPROTO_BEETPH)
pub const ipproto_comp = SocketLevel(C.IPPROTO_COMP)
pub const ipproto_dccp = SocketLevel(C.IPPROTO_DCCP)
pub const ipproto_dstopts = SocketLevel(C.IPPROTO_DSTOPTS)
pub const ipproto_egp = SocketLevel(C.IPPROTO_EGP)
pub const ipproto_encap = SocketLevel(C.IPPROTO_ENCAP)
pub const ipproto_esp = SocketLevel(C.IPPROTO_ESP)
pub const ipproto_ethernet = SocketLevel(C.IPPROTO_ETHERNET)
pub const ipproto_fragment = SocketLevel(C.IPPROTO_FRAGMENT)
pub const ipproto_gre = SocketLevel(C.IPPROTO_GRE)
pub const ipproto_hopopts = SocketLevel(C.IPPROTO_HOPOPTS)
pub const ipproto_icmpv6 = SocketLevel(C.IPPROTO_ICMPV6)
pub const ipproto_icmp = SocketLevel(C.IPPROTO_ICMP)
pub const ipproto_idp = SocketLevel(C.IPPROTO_IDP)
pub const ipproto_igmp = SocketLevel(C.IPPROTO_IGMP)
pub const ipproto_ipip = SocketLevel(C.IPPROTO_IPIP)
pub const ipproto_ipv6 = SocketLevel(C.IPPROTO_IPV6)
pub const ipproto_ip = SocketLevel(C.IPPROTO_IP)
pub const ipproto_l2tp = SocketLevel(C.IPPROTO_L2TP)
pub const ipproto_mh = SocketLevel(C.IPPROTO_MH)
pub const ipproto_mpls = SocketLevel(C.IPPROTO_MPLS)
pub const ipproto_mptcp = SocketLevel(C.IPPROTO_MPTCP)
pub const ipproto_mtp = SocketLevel(C.IPPROTO_MTP)
pub const ipproto_none = SocketLevel(C.IPPROTO_NONE)
pub const ipproto_pim = SocketLevel(C.IPPROTO_PIM)
pub const ipproto_pup = SocketLevel(C.IPPROTO_PUP)
pub const ipproto_raw = SocketLevel(C.IPPROTO_RAW)
pub const ipproto_routing = SocketLevel(C.IPPROTO_ROUTING)
pub const ipproto_rsvp = SocketLevel(C.IPPROTO_RSVP)
pub const ipproto_sctp = SocketLevel(C.IPPROTO_SCTP)
pub const ipproto_smc = SocketLevel(C.IPPROTO_SMC)
pub const ipproto_tcp = SocketLevel(C.IPPROTO_TCP)
pub const ipproto_tp = SocketLevel(C.IPPROTO_TP)
pub const ipproto_udplite = SocketLevel(C.IPPROTO_UDPLITE)
pub const ipproto_udp = SocketLevel(C.IPPROTO_UDP)
pub const ipv6_2292dstopts = SocketOption(C.IPV6_2292DSTOPTS)
pub const ipv6_2292hoplimit = SocketOption(C.IPV6_2292HOPLIMIT)
pub const ipv6_2292hopopts = SocketOption(C.IPV6_2292HOPOPTS)
pub const ipv6_2292pktinfo = SocketOption(C.IPV6_2292PKTINFO)
pub const ipv6_2292pktoptions = SocketOption(C.IPV6_2292PKTOPTIONS)
pub const ipv6_2292rthdr = SocketOption(C.IPV6_2292RTHDR)
pub const ipv6_addrform = SocketOption(C.IPV6_ADDRFORM)
pub const ipv6_addr_preferences = SocketOption(C.IPV6_ADDR_PREFERENCES)
pub const ipv6_add_membership = SocketOption(C.IPV6_ADD_MEMBERSHIP)
pub const ipv6_authhdr = SocketOption(C.IPV6_AUTHHDR)
pub const ipv6_autoflowlabel = SocketOption(C.IPV6_AUTOFLOWLABEL)
pub const ipv6_checksum = SocketOption(C.IPV6_CHECKSUM)
pub const ipv6_dontfrag = SocketOption(C.IPV6_DONTFRAG)
pub const ipv6_drop_membership = SocketOption(C.IPV6_DROP_MEMBERSHIP)
pub const ipv6_dstopts = SocketOption(C.IPV6_DSTOPTS)
pub const ipv6_freebind = SocketOption(C.IPV6_FREEBIND)
pub const ipv6_hdrincl = SocketOption(C.IPV6_HDRINCL)
pub const ipv6_hoplimit = SocketOption(C.IPV6_HOPLIMIT)
pub const ipv6_hopopts = SocketOption(C.IPV6_HOPOPTS)
pub const ipv6_ipsec_policy = SocketOption(C.IPV6_IPSEC_POLICY)
pub const ipv6_join_anycast = SocketOption(C.IPV6_JOIN_ANYCAST)
pub const ipv6_join_group = SocketOption(C.IPV6_JOIN_GROUP)
pub const ipv6_leave_anycast = SocketOption(C.IPV6_LEAVE_ANYCAST)
pub const ipv6_leave_group = SocketOption(C.IPV6_LEAVE_GROUP)
pub const ipv6_minhopcount = SocketOption(C.IPV6_MINHOPCOUNT)
pub const ipv6_mtu = SocketOption(C.IPV6_MTU)
pub const ipv6_mtu_discover = SocketOption(C.IPV6_MTU_DISCOVER)
pub const ipv6_multicast_all = SocketOption(C.IPV6_MULTICAST_ALL)
pub const ipv6_multicast_hops = SocketOption(C.IPV6_MULTICAST_HOPS)
pub const ipv6_multicast_if = SocketOption(C.IPV6_MULTICAST_IF)
pub const ipv6_multicast_loop = SocketOption(C.IPV6_MULTICAST_LOOP)
pub const ipv6_nexthop = SocketOption(C.IPV6_NEXTHOP)
pub const ipv6_origdstaddr = SocketOption(C.IPV6_ORIGDSTADDR)
pub const ipv6_pathmtu = SocketOption(C.IPV6_PATHMTU)
pub const ipv6_pktinfo = SocketOption(C.IPV6_PKTINFO)
pub const ipv6_pmtudisc_dont = SocketOption(C.IPV6_PMTUDISC_DONT)
pub const ipv6_pmtudisc_do = SocketOption(C.IPV6_PMTUDISC_DO)
pub const ipv6_pmtudisc_interface = SocketOption(C.IPV6_PMTUDISC_INTERFACE)
pub const ipv6_pmtudisc_omit = SocketOption(C.IPV6_PMTUDISC_OMIT)
pub const ipv6_pmtudisc_probe = SocketOption(C.IPV6_PMTUDISC_PROBE)
pub const ipv6_pmtudisc_want = SocketOption(C.IPV6_PMTUDISC_WANT)
pub const ipv6_recvdstopts = SocketOption(C.IPV6_RECVDSTOPTS)
pub const ipv6_recverr = SocketOption(C.IPV6_RECVERR)
pub const ipv6_recverr_rfc4884 = SocketOption(C.IPV6_RECVERR_RFC4884)
pub const ipv6_recvfragsize = SocketOption(C.IPV6_RECVFRAGSIZE)
pub const ipv6_recvhoplimit = SocketOption(C.IPV6_RECVHOPLIMIT)
pub const ipv6_recvhopopts = SocketOption(C.IPV6_RECVHOPOPTS)
pub const ipv6_recvorigdstaddr = SocketOption(C.IPV6_RECVORIGDSTADDR)
pub const ipv6_recvpathmtu = SocketOption(C.IPV6_RECVPATHMTU)
pub const ipv6_recvpktinfo = SocketOption(C.IPV6_RECVPKTINFO)
pub const ipv6_recvrthdr = SocketOption(C.IPV6_RECVRTHDR)
pub const ipv6_recvtclass = SocketOption(C.IPV6_RECVTCLASS)
pub const ipv6_router_alert = SocketOption(C.IPV6_ROUTER_ALERT)
pub const ipv6_router_alert_isolate = SocketOption(C.IPV6_ROUTER_ALERT_ISOLATE)
pub const ipv6_rthdrdstopts = SocketOption(C.IPV6_RTHDRDSTOPTS)
pub const ipv6_rthdr = SocketOption(C.IPV6_RTHDR)
pub const ipv6_rthdr_loose = SocketOption(C.IPV6_RTHDR_LOOSE)
pub const ipv6_rthdr_strict = SocketOption(C.IPV6_RTHDR_STRICT)
pub const ipv6_rthdr_type_0 = SocketOption(C.IPV6_RTHDR_TYPE_0)
pub const ipv6_rxdstopts = SocketOption(C.IPV6_RXDSTOPTS)
pub const ipv6_rxhopopts = SocketOption(C.IPV6_RXHOPOPTS)
pub const ipv6_tclass = SocketOption(C.IPV6_TCLASS)
pub const ipv6_transparent = SocketOption(C.IPV6_TRANSPARENT)
pub const ipv6_unicast_hops = SocketOption(C.IPV6_UNICAST_HOPS)
pub const ipv6_unicast_if = SocketOption(C.IPV6_UNICAST_IF)
pub const ipv6_v6only = SocketOption(C.IPV6_V6ONLY)
pub const ipv6_xfrm_policy = SocketOption(C.IPV6_XFRM_POLICY)
pub const ip_add_membership = SocketOption(C.IP_ADD_MEMBERSHIP)
pub const ip_add_source_membership = SocketOption(C.IP_ADD_SOURCE_MEMBERSHIP)
pub const ip_bind_address_no_port = SocketOption(C.IP_BIND_ADDRESS_NO_PORT)
pub const ip_block_source = SocketOption(C.IP_BLOCK_SOURCE)
pub const ip_checksum = SocketOption(C.IP_CHECKSUM)
pub const ip_default_multicast_loop = SocketOption(C.IP_DEFAULT_MULTICAST_LOOP)
pub const ip_default_multicast_ttl = SocketOption(C.IP_DEFAULT_MULTICAST_TTL)
pub const ip_drop_membership = SocketOption(C.IP_DROP_MEMBERSHIP)
pub const ip_drop_source_membership = SocketOption(C.IP_DROP_SOURCE_MEMBERSHIP)
pub const ip_freebind = SocketOption(C.IP_FREEBIND)
pub const ip_hdrincl = SocketOption(C.IP_HDRINCL)
pub const ip_ipsec_policy = SocketOption(C.IP_IPSEC_POLICY)
pub const ip_local_port_range = SocketOption(C.IP_LOCAL_PORT_RANGE)
pub const ip_max_memberships = SocketOption(C.IP_MAX_MEMBERSHIPS)
pub const ip_minttl = SocketOption(C.IP_MINTTL)
pub const ip_msfilter = SocketOption(C.IP_MSFILTER)
pub const ip_mtu = SocketOption(C.IP_MTU)
pub const ip_mtu_discover = SocketOption(C.IP_MTU_DISCOVER)
pub const ip_multicast_all = SocketOption(C.IP_MULTICAST_ALL)
pub const ip_multicast_if = SocketOption(C.IP_MULTICAST_IF)
pub const ip_multicast_loop = SocketOption(C.IP_MULTICAST_LOOP)
pub const ip_multicast_ttl = SocketOption(C.IP_MULTICAST_TTL)
pub const ip_nodefrag = SocketOption(C.IP_NODEFRAG)
pub const ip_options = SocketOption(C.IP_OPTIONS)
pub const ip_origdstaddr = SocketOption(C.IP_ORIGDSTADDR)
pub const ip_passsec = SocketOption(C.IP_PASSSEC)
pub const ip_pktinfo = SocketOption(C.IP_PKTINFO)
pub const ip_pktoptions = SocketOption(C.IP_PKTOPTIONS)
pub const ip_pmtudisc = SocketOption(C.IP_PMTUDISC)
pub const ip_pmtudisc_dont = SocketOption(C.IP_PMTUDISC_DONT)
pub const ip_pmtudisc_do = SocketOption(C.IP_PMTUDISC_DO)
pub const ip_pmtudisc_interface = SocketOption(C.IP_PMTUDISC_INTERFACE)
pub const ip_pmtudisc_omit = SocketOption(C.IP_PMTUDISC_OMIT)
pub const ip_pmtudisc_probe = SocketOption(C.IP_PMTUDISC_PROBE)
pub const ip_pmtudisc_want = SocketOption(C.IP_PMTUDISC_WANT)
pub const ip_protocol = SocketOption(C.IP_PROTOCOL)
pub const ip_recverr = SocketOption(C.IP_RECVERR)
pub const ip_recverr_rfc4884 = SocketOption(C.IP_RECVERR_RFC4884)
pub const ip_recvfragsize = SocketOption(C.IP_RECVFRAGSIZE)
pub const ip_recvopts = SocketOption(C.IP_RECVOPTS)
pub const ip_recvorigdstaddr = SocketOption(C.IP_RECVORIGDSTADDR)
pub const ip_recvretopts = SocketOption(C.IP_RECVRETOPTS)
pub const ip_recvtos = SocketOption(C.IP_RECVTOS)
pub const ip_recvttl = SocketOption(C.IP_RECVTTL)
pub const ip_retopts = SocketOption(C.IP_RETOPTS)
pub const ip_router_alert = SocketOption(C.IP_ROUTER_ALERT)
pub const ip_tos = SocketOption(C.IP_TOS)
pub const ip_transparent = SocketOption(C.IP_TRANSPARENT)
pub const ip_ttl = SocketOption(C.IP_TTL)
pub const ip_unblock_source = SocketOption(C.IP_UNBLOCK_SOURCE)
pub const ip_unicast_if = SocketOption(C.IP_UNICAST_IF)
pub const ip_xfrm_policy = SocketOption(C.IP_XFRM_POLICY)
pub const ni_dgram = NameInfoFlag(C.NI_DGRAM)
pub const ni_maxhost = NameInfoFlag(C.NI_MAXHOST)
pub const ni_maxserv = NameInfoFlag(C.NI_MAXSERV)
pub const ni_namereqd = NameInfoFlag(C.NI_NAMEREQD)
pub const ni_nofqdn = NameInfoFlag(C.NI_NOFQDN)
pub const ni_numerichost = NameInfoFlag(C.NI_NUMERICHOST)
pub const ni_numericserv = NameInfoFlag(C.NI_NUMERICSERV)
pub const sock_cloexec = SocketType(C.SOCK_CLOEXEC)
pub const sock_dccp = SocketType(C.SOCK_DCCP)
pub const sock_dgram = SocketType(C.SOCK_DGRAM)
pub const sock_nonblock = SocketType(C.SOCK_NONBLOCK)
pub const sock_packet = SocketType(C.SOCK_PACKET)
pub const sock_raw = SocketType(C.SOCK_RAW)
pub const sock_rdm = SocketType(C.SOCK_RDM)
pub const sock_seqpacket = SocketType(C.SOCK_SEQPACKET)
pub const sock_stream = SocketType(C.SOCK_STREAM)
pub const sol_aal = SocketLevel(C.SOL_AAL)
pub const sol_alg = SocketLevel(C.SOL_ALG)
pub const sol_atm = SocketLevel(C.SOL_ATM)
pub const sol_bluetooth = SocketLevel(C.SOL_BLUETOOTH)
pub const sol_caif = SocketLevel(C.SOL_CAIF)
pub const sol_dccp = SocketLevel(C.SOL_DCCP)
pub const sol_decnet = SocketLevel(C.SOL_DECNET)
pub const sol_icmpv6 = SocketLevel(C.SOL_ICMPV6)
pub const sol_ipv6 = SocketLevel(C.SOL_IPV6)
pub const sol_ip = SocketLevel(C.SOL_IP)
pub const sol_irda = SocketLevel(C.SOL_IRDA)
pub const sol_iucv = SocketLevel(C.SOL_IUCV)
pub const sol_kcm = SocketLevel(C.SOL_KCM)
pub const sol_llc = SocketLevel(C.SOL_LLC)
pub const sol_mctp = SocketLevel(C.SOL_MCTP)
pub const sol_mptcp = SocketLevel(C.SOL_MPTCP)
pub const sol_netbeui = SocketLevel(C.SOL_NETBEUI)
pub const sol_netlink = SocketLevel(C.SOL_NETLINK)
pub const sol_nfc = SocketLevel(C.SOL_NFC)
pub const sol_packet = SocketLevel(C.SOL_PACKET)
pub const sol_pnpipe = SocketLevel(C.SOL_PNPIPE)
pub const sol_pppol2tp = SocketLevel(C.SOL_PPPOL2TP)
pub const sol_raw = SocketLevel(C.SOL_RAW)
pub const sol_rds = SocketLevel(C.SOL_RDS)
pub const sol_rxrpc = SocketLevel(C.SOL_RXRPC)
pub const sol_smc = SocketLevel(C.SOL_SMC)
pub const sol_socket = SocketLevel(C.SOL_SOCKET)
pub const sol_tipc = SocketLevel(C.SOL_TIPC)
pub const sol_tls = SocketLevel(C.SOL_TLS)
pub const sol_vsock = SocketLevel(C.SOL_VSOCK)
pub const sol_x25 = SocketLevel(C.SOL_X25)
pub const sol_xdp = SocketLevel(C.SOL_XDP)
pub const so_acceptconn = SocketOption(C.SO_ACCEPTCONN)
pub const so_attach_bpf = SocketOption(C.SO_ATTACH_BPF)
pub const so_attach_filter = SocketOption(C.SO_ATTACH_FILTER)
pub const so_attach_reuseport_cbpf = SocketOption(C.SO_ATTACH_REUSEPORT_CBPF)
pub const so_attach_reuseport_ebpf = SocketOption(C.SO_ATTACH_REUSEPORT_EBPF)
pub const so_bindtodevice = SocketOption(C.SO_BINDTODEVICE)
pub const so_bindtoifindex = SocketOption(C.SO_BINDTOIFINDEX)
pub const so_bpf_extensions = SocketOption(C.SO_BPF_EXTENSIONS)
pub const so_broadcast = SocketOption(C.SO_BROADCAST)
pub const so_bsdcompat = SocketOption(C.SO_BSDCOMPAT)
pub const so_buf_lock = SocketOption(C.SO_BUF_LOCK)
pub const so_busy_poll = SocketOption(C.SO_BUSY_POLL)
pub const so_busy_poll_budget = SocketOption(C.SO_BUSY_POLL_BUDGET)
pub const so_cnx_advice = SocketOption(C.SO_CNX_ADVICE)
pub const so_cookie = SocketOption(C.SO_COOKIE)
pub const so_debug = SocketOption(C.SO_DEBUG)
pub const so_detach_bpf = SocketOption(C.SO_DETACH_BPF)
pub const so_detach_filter = SocketOption(C.SO_DETACH_FILTER)
pub const so_detach_reuseport_bpf = SocketOption(C.SO_DETACH_REUSEPORT_BPF)
pub const so_devmem_dmabuf = SocketOption(C.SO_DEVMEM_DMABUF)
pub const so_devmem_dontneed = SocketOption(C.SO_DEVMEM_DONTNEED)
pub const so_devmem_linear = SocketOption(C.SO_DEVMEM_LINEAR)
pub const so_domain = SocketOption(C.SO_DOMAIN)
pub const so_dontroute = SocketOption(C.SO_DONTROUTE)
pub const so_error = SocketOption(C.SO_ERROR)
pub const so_get_filter = SocketOption(C.SO_GET_FILTER)
pub const so_incoming_cpu = SocketOption(C.SO_INCOMING_CPU)
pub const so_incoming_napi_id = SocketOption(C.SO_INCOMING_NAPI_ID)
pub const so_inq = SocketOption(C.SO_INQ)
pub const so_keepalive = SocketOption(C.SO_KEEPALIVE)
pub const so_linger = SocketOption(C.SO_LINGER)
pub const so_lock_filter = SocketOption(C.SO_LOCK_FILTER)
pub const so_mark = SocketOption(C.SO_MARK)
pub const so_max_pacing_rate = SocketOption(C.SO_MAX_PACING_RATE)
pub const so_meminfo = SocketOption(C.SO_MEMINFO)
pub const so_netns_cookie = SocketOption(C.SO_NETNS_COOKIE)
pub const so_nofcs = SocketOption(C.SO_NOFCS)
pub const so_no_check = SocketOption(C.SO_NO_CHECK)
pub const so_oobinline = SocketOption(C.SO_OOBINLINE)
pub const so_passcred = SocketOption(C.SO_PASSCRED)
pub const so_passpidfd = SocketOption(C.SO_PASSPIDFD)
pub const so_passrights = SocketOption(C.SO_PASSRIGHTS)
pub const so_passsec = SocketOption(C.SO_PASSSEC)
pub const so_peek_off = SocketOption(C.SO_PEEK_OFF)
pub const so_peercred = SocketOption(C.SO_PEERCRED)
pub const so_peergroups = SocketOption(C.SO_PEERGROUPS)
pub const so_peername = SocketOption(C.SO_PEERNAME)
pub const so_peerpidfd = SocketOption(C.SO_PEERPIDFD)
pub const so_peersec = SocketOption(C.SO_PEERSEC)
pub const so_prefer_busy_poll = SocketOption(C.SO_PREFER_BUSY_POLL)
pub const so_priority = SocketOption(C.SO_PRIORITY)
pub const so_protocol = SocketOption(C.SO_PROTOCOL)
pub const so_rcvbufforce = SocketOption(C.SO_RCVBUFFORCE)
pub const so_rcvbuf = SocketOption(C.SO_RCVBUF)
pub const so_rcvlowat = SocketOption(C.SO_RCVLOWAT)
pub const so_rcvmark = SocketOption(C.SO_RCVMARK)
pub const so_rcvpriority = SocketOption(C.SO_RCVPRIORITY)
pub const so_rcvtimeo = SocketOption(C.SO_RCVTIMEO)
pub const so_rcvtimeo_new = SocketOption(C.SO_RCVTIMEO_NEW)
pub const so_rcvtimeo_old = SocketOption(C.SO_RCVTIMEO_OLD)
pub const so_reserve_mem = SocketOption(C.SO_RESERVE_MEM)
pub const so_reuseaddr = SocketOption(C.SO_REUSEADDR)
pub const so_reuseport = SocketOption(C.SO_REUSEPORT)
pub const so_rxq_ovfl = SocketOption(C.SO_RXQ_OVFL)
pub const so_security_authentication = SocketOption(C.SO_SECURITY_AUTHENTICATION)
pub const so_security_encryption_network = SocketOption(C.SO_SECURITY_ENCRYPTION_NETWORK)
pub const so_security_encryption_transport = SocketOption(C.SO_SECURITY_ENCRYPTION_TRANSPORT)
pub const so_select_err_queue = SocketOption(C.SO_SELECT_ERR_QUEUE)
pub const so_sndbufforce = SocketOption(C.SO_SNDBUFFORCE)
pub const so_sndbuf = SocketOption(C.SO_SNDBUF)
pub const so_sndlowat = SocketOption(C.SO_SNDLOWAT)
pub const so_sndtimeo = SocketOption(C.SO_SNDTIMEO)
pub const so_sndtimeo_new = SocketOption(C.SO_SNDTIMEO_NEW)
pub const so_sndtimeo_old = SocketOption(C.SO_SNDTIMEO_OLD)
pub const so_timestamping = SocketOption(C.SO_TIMESTAMPING)
pub const so_timestamping_new = SocketOption(C.SO_TIMESTAMPING_NEW)
pub const so_timestamping_old = SocketOption(C.SO_TIMESTAMPING_OLD)
pub const so_timestampns = SocketOption(C.SO_TIMESTAMPNS)
pub const so_timestampns_new = SocketOption(C.SO_TIMESTAMPNS_NEW)
pub const so_timestampns_old = SocketOption(C.SO_TIMESTAMPNS_OLD)
pub const so_timestamp = SocketOption(C.SO_TIMESTAMP)
pub const so_timestamp_new = SocketOption(C.SO_TIMESTAMP_NEW)
pub const so_timestamp_old = SocketOption(C.SO_TIMESTAMP_OLD)
pub const so_txrehash = SocketOption(C.SO_TXREHASH)
pub const so_txtime = SocketOption(C.SO_TXTIME)
pub const so_type = SocketOption(C.SO_TYPE)
pub const so_wifi_status = SocketOption(C.SO_WIFI_STATUS)
pub const so_zerocopy = SocketOption(C.SO_ZEROCOPY)
+6 -4
View File
@@ -13,7 +13,7 @@ fn main() {
for a in ai { for a in ai {
socket = netio.Socket.new(a.family, a.sock_type, a.protocol)! socket = netio.Socket.new(a.family, a.sock_type, a.protocol)!
socket.set_option(C.IPPROTO_IPV6, C.IPV6_V6ONLY, 0)! socket.set_option(netio.ipproto_ipv6, netio.ipv6_v6only, 0)!
socket.bind(a.addr) or { socket.bind(a.addr) or {
socket.close()! socket.close()!
continue continue
@@ -37,9 +37,11 @@ fn main() {
eprintln('ACCEPT: ${err}') eprintln('ACCEPT: ${err}')
exit(1) exit(1)
} }
eprintln(netio.name(remote_addr)!) eprintln(netio.translate_name(remote_addr,
eprintln('Remote address: ${remote_addr} | ${remote_addr.family()} | ${remote_addr.size()}') flags: netio.ni_numerichost | netio.ni_numericserv
eprintln(remote_addr.u8_array()) )!)
eprintln(netio.translate_name(remote_addr)!)
eprintln('Remote address: ${remote_addr}')
conn.close()! conn.close()!
} }
} }
Executable
+45
View File
@@ -0,0 +1,45 @@
#!/bin/sh
program_linux='
#include <netinet/in.h>
#include <sys/socket.h>
#include <netdb.h>
'
program_freebsd='
#include <netinet/in.h>
#include <sys/socket.h>
#include <netdb.h>
'
system=$(uname -s)
case $system in
Linux) PROGRAM=$program_linux;;
FreeBSD) PROGRAM=$program_freebsd;;
*) echo $0: $system is unsupported >&2; exit 1;;
esac
KIND=$1
KIND=${KIND:-"SocketType,SocketLevel,SocketOption,AddrFamily,AddrInfoFlag,NameInfoFlag"}
echo module netio
echo
echo '/*'
echo -e "\tThis file is generated by mkconst.sh, DO NOT EDIT."
echo '*/'
echo
echo "$PROGRAM" | ${CC:-"cc"} -x c - -E -dM ${CFLAGS:-""} |
awk -v KIND=$KIND '
$1 != "#define" || $2 ~ /\(/ || $3 == "" {next}
$2 ~ /^_/ {next}
$2 ~ /^[a-z]/ {next}
$2 ~ /^SOCK_/ && KIND ~ "SocketType" {printf "pub const %s = SocketType(C.%s)\n", tolower($2), $2}
$2 ~ /^(SOL|IPPROTO)_/ && KIND ~ "SocketLevel" {printf "pub const %s = SocketLevel(C.%s)\n", tolower($2), $2}
$2 ~ /^(SO|IP|IPV6)_/ && KIND ~ "SocketOption" {printf "pub const %s = SocketOption(C.%s)\n", tolower($2), $2}
$2 ~ /^AF_/ && KIND ~ "AddrFamily" {printf "pub const %s = AddrFamily(C.%s)\n", tolower($2), $2}
$2 ~ /^AI_/ && KIND ~ "AddrInfoFlag" {printf "pub const %s = AddrInfoFlag(C.%s)\n", tolower($2), $2}
$2 ~ /^NI_/ && KIND ~ "NameInfoFlag" {printf "pub const %s = NameInfoFlag(C.%s)\n", tolower($2), $2}
KIND ~ "Any" {printf "%s\n", $0}
{next}' | sort -k 2 -V
+10 -3
View File
@@ -4,9 +4,8 @@ module netio
// See [address_families(7)](https://www.man7.org/linux/man-pages/man7/address_families.7.html). // See [address_families(7)](https://www.man7.org/linux/man-pages/man7/address_families.7.html).
pub type AddrFamily = int pub type AddrFamily = int
// The protocol number type. // The protocol number.
// See [protocols(5)](https://man7.org/linux/man-pages/man5/protocols.5.html), // See [protocols(5)](https://man7.org/linux/man-pages/man5/protocols.5.html).
// and [getprotoent(3)](https://man7.org/linux/man-pages/man3/getprotoent.3.html) for details.
pub type Protocol = int pub type Protocol = int
// The socket type. // The socket type.
@@ -17,3 +16,11 @@ pub type SocketLevel = int
// The socket option type. // The socket option type.
pub type SocketOption = int pub type SocketOption = int
// Flag type for `translate_addr()`.
// See [getaddrinfo(3)](https://man7.org/linux/man-pages/man3/getaddrinfo.3.html) for details.
pub type AddrInfoFlag = int
// Flag type for `translate_name()`.
// See [getnameinfo(3)](https://man7.org/linux/man-pages/man3/getnameinfo.3.html) for details.
pub type NameInfoFlag = int
+1 -1
View File
@@ -1,6 +1,6 @@
# Protocols Database # Protocols Database
The **protocol** module provides thread-safe access to the protocols database. The **protocol** module provides thread-safe access to the operatins system protocols database.
See [protocols(5)](https://www.man7.org/linux/man-pages/man5/protocols.5.html) See [protocols(5)](https://www.man7.org/linux/man-pages/man5/protocols.5.html)
and [getprotoent(3)](https://man7.org/linux/man-pages/man3/getprotoent.3.html) and [getprotoent(3)](https://man7.org/linux/man-pages/man3/getprotoent.3.html)
-47
View File
@@ -1,47 +0,0 @@
module netio
/*
Socket options defined on Darwin.
*/
pub const so_acceptconn = SocketOption(C.SO_ACCEPTCONN)
pub const so_bindtodevice = SocketOption(C.SO_BINDTODEVICE)
pub const so_broadcast = SocketOption(C.SO_BROADCAST)
pub const so_debug = SocketOption(C.SO_DEBUG)
pub const so_dontroute = SocketOption(C.SO_DONTROUTE)
pub const so_donttrunc = SocketOption(C.SO_DONTTRUNC)
pub const so_error = SocketOption(C.SO_ERROR)
pub const so_keepalive = SocketOption(C.SO_KEEPALIVE)
pub const so_label = SocketOption(C.SO_LABEL)
pub const so_linger = SocketOption(C.SO_LINGER)
pub const so_linger_sec = SocketOption(C.SO_LINGER_SEC)
pub const so_netsvc_marking_level = SocketOption(C.SO_NETSVC_MARKING_LEVEL)
pub const so_net_service_type = SocketOption(C.SO_NET_SERVICE_TYPE)
pub const so_nke = SocketOption(C.SO_NKE)
pub const so_noaddrerr = SocketOption(C.SO_NOADDRERR)
pub const so_nosigpipe = SocketOption(C.SO_NOSIGPIPE)
pub const so_notifyconflict = SocketOption(C.SO_NOTIFYCONFLICT)
pub const so_np_extensions = SocketOption(C.SO_NP_EXTENSIONS)
pub const so_nread = SocketOption(C.SO_NREAD)
pub const so_numrcvpkt = SocketOption(C.SO_NUMRCVPKT)
pub const so_nwrite = SocketOption(C.SO_NWRITE)
pub const so_oobinline = SocketOption(C.SO_OOBINLINE)
pub const so_peerlabel = SocketOption(C.SO_PEERLABEL)
pub const so_randomport = SocketOption(C.SO_RANDOMPORT)
pub const so_rcvbuf = SocketOption(C.SO_RCVBUF)
pub const so_rcvlowat = SocketOption(C.SO_RCVLOWAT)
pub const so_rcvtimeo = SocketOption(C.SO_RCVTIMEO)
pub const so_resolver_signature = SocketOption(C.SO_RESOLVER_SIGNATURE)
pub const so_reuseaddr = SocketOption(C.SO_REUSEADDR)
pub const so_reuseport = SocketOption(C.SO_REUSEPORT)
pub const so_reuseshareuid = SocketOption(C.SO_REUSESHAREUID)
pub const so_sndbuf = SocketOption(C.SO_SNDBUF)
pub const so_sndlowat = SocketOption(C.SO_SNDLOWAT)
pub const so_sndtimeo = SocketOption(C.SO_SNDTIMEO)
pub const so_timestamp = SocketOption(C.SO_TIMESTAMP)
pub const so_timestamp_monotonic = SocketOption(C.SO_TIMESTAMP_MONOTONIC)
pub const so_type = SocketOption(C.SO_TYPE)
pub const so_upcallclosewait = SocketOption(C.SO_UPCALLCLOSEWAIT)
pub const so_useloopback = SocketOption(C.SO_USELOOPBACK)
pub const so_wantmore = SocketOption(C.SO_WANTMORE)
pub const so_wantoobflag = SocketOption(C.SO_WANTOOBFLAG)
-53
View File
@@ -1,53 +0,0 @@
module netio
/*
Socket options defined on FreeBSD.
*/
pub const so_acceptconn = SocketOption(C.SO_ACCEPTCONN)
pub const so_acceptfilter = SocketOption(C.SO_ACCEPTFILTER)
pub const so_bintime = SocketOption(C.SO_BINTIME)
pub const so_broadcast = SocketOption(C.SO_BROADCAST)
pub const so_debug = SocketOption(C.SO_DEBUG)
pub const so_domain = SocketOption(C.SO_DOMAIN)
pub const so_dontroute = SocketOption(C.SO_DONTROUTE)
pub const so_error = SocketOption(C.SO_ERROR)
pub const so_fib = SocketOption(C.SO_FIB)
pub const so_keepalive = SocketOption(C.SO_KEEPALIVE)
pub const so_label = SocketOption(C.SO_LABEL)
pub const so_linger = SocketOption(C.SO_LINGER)
pub const so_listenincqlen = SocketOption(C.SO_LISTENINCQLEN)
pub const so_listenqlen = SocketOption(C.SO_LISTENQLEN)
pub const so_listenqlimit = SocketOption(C.SO_LISTENQLIMIT)
pub const so_max_pacing_rate = SocketOption(C.SO_MAX_PACING_RATE)
pub const so_nosigpipe = SocketOption(C.SO_NOSIGPIPE)
pub const so_no_ddp = SocketOption(C.SO_NO_DDP)
pub const so_no_offload = SocketOption(C.SO_NO_OFFLOAD)
pub const so_oobinline = SocketOption(C.SO_OOBINLINE)
pub const so_peerlabel = SocketOption(C.SO_PEERLABEL)
pub const so_protocol = SocketOption(C.SO_PROTOCOL)
pub const so_prototype = SocketOption(C.SO_PROTOTYPE)
pub const so_rcvbuf = SocketOption(C.SO_RCVBUF)
pub const so_rcvlowat = SocketOption(C.SO_RCVLOWAT)
pub const so_rcvtimeo = SocketOption(C.SO_RCVTIMEO)
pub const so_rerror = SocketOption(C.SO_RERROR)
pub const so_reuseaddr = SocketOption(C.SO_REUSEADDR)
pub const so_reuseport = SocketOption(C.SO_REUSEPORT)
pub const so_reuseport_lb = SocketOption(C.SO_REUSEPORT_LB)
pub const so_setfib = SocketOption(C.SO_SETFIB)
pub const so_sndbuf = SocketOption(C.SO_SNDBUF)
pub const so_sndlowat = SocketOption(C.SO_SNDLOWAT)
pub const so_sndtimeo = SocketOption(C.SO_SNDTIMEO)
pub const so_splice = SocketOption(C.SO_SPLICE)
pub const so_timestamp = SocketOption(C.SO_TIMESTAMP)
pub const so_ts_bintime = SocketOption(C.SO_TS_BINTIME)
pub const so_ts_clock = SocketOption(C.SO_TS_CLOCK)
pub const so_ts_clock_max = SocketOption(C.SO_TS_CLOCK_MAX)
pub const so_ts_default = SocketOption(C.SO_TS_DEFAULT)
pub const so_ts_monotonic = SocketOption(C.SO_TS_MONOTONIC)
pub const so_ts_realtime = SocketOption(C.SO_TS_REALTIME)
pub const so_ts_realtime_micro = SocketOption(C.SO_TS_REALTIME_MICRO)
pub const so_type = SocketOption(C.SO_TYPE)
pub const so_useloopback = SocketOption(C.SO_USELOOPBACK)
pub const so_user_cookie = SocketOption(C.SO_USER_COOKIE)
pub const so_vendor = SocketOption(C.SO_VENDOR)
-94
View File
@@ -1,94 +0,0 @@
module netio
/*
Socket options defined on Linux.
*/
pub const so_acceptconn = SocketOption(C.SO_ACCEPTCONN)
pub const so_attach_bpf = SocketOption(C.SO_ATTACH_BPF)
pub const so_attach_filter = SocketOption(C.SO_ATTACH_FILTER)
pub const so_attach_reuseport_cbpf = SocketOption(C.SO_ATTACH_REUSEPORT_CBPF)
pub const so_attach_reuseport_ebpf = SocketOption(C.SO_ATTACH_REUSEPORT_EBPF)
pub const so_bindtodevice = SocketOption(C.SO_BINDTODEVICE)
pub const so_bindtoifindex = SocketOption(C.SO_BINDTOIFINDEX)
pub const so_bpf_extensions = SocketOption(C.SO_BPF_EXTENSIONS)
pub const so_broadcast = SocketOption(C.SO_BROADCAST)
pub const so_bsdcompat = SocketOption(C.SO_BSDCOMPAT)
pub const so_buf_lock = SocketOption(C.SO_BUF_LOCK)
pub const so_busy_poll = SocketOption(C.SO_BUSY_POLL)
pub const so_busy_poll_budget = SocketOption(C.SO_BUSY_POLL_BUDGET)
pub const so_cnx_advice = SocketOption(C.SO_CNX_ADVICE)
pub const so_cookie = SocketOption(C.SO_COOKIE)
pub const so_debug = SocketOption(C.SO_DEBUG)
pub const so_detach_bpf = SocketOption(C.SO_DETACH_BPF)
pub const so_detach_filter = SocketOption(C.SO_DETACH_FILTER)
pub const so_detach_reuseport_bpf = SocketOption(C.SO_DETACH_REUSEPORT_BPF)
pub const so_devmem_dmabuf = SocketOption(C.SO_DEVMEM_DMABUF)
pub const so_devmem_dontneed = SocketOption(C.SO_DEVMEM_DONTNEED)
pub const so_devmem_linear = SocketOption(C.SO_DEVMEM_LINEAR)
pub const so_domain = SocketOption(C.SO_DOMAIN)
pub const so_dontroute = SocketOption(C.SO_DONTROUTE)
pub const so_error = SocketOption(C.SO_ERROR)
pub const so_get_filter = SocketOption(C.SO_GET_FILTER)
pub const so_incoming_cpu = SocketOption(C.SO_INCOMING_CPU)
pub const so_incoming_napi_id = SocketOption(C.SO_INCOMING_NAPI_ID)
pub const so_inq = SocketOption(C.SO_INQ)
pub const so_keepalive = SocketOption(C.SO_KEEPALIVE)
pub const so_linger = SocketOption(C.SO_LINGER)
pub const so_lock_filter = SocketOption(C.SO_LOCK_FILTER)
pub const so_mark = SocketOption(C.SO_MARK)
pub const so_max_pacing_rate = SocketOption(C.SO_MAX_PACING_RATE)
pub const so_meminfo = SocketOption(C.SO_MEMINFO)
pub const so_netns_cookie = SocketOption(C.SO_NETNS_COOKIE)
pub const so_nofcs = SocketOption(C.SO_NOFCS)
pub const so_no_check = SocketOption(C.SO_NO_CHECK)
pub const so_oobinline = SocketOption(C.SO_OOBINLINE)
pub const so_passcred = SocketOption(C.SO_PASSCRED)
pub const so_passpidfd = SocketOption(C.SO_PASSPIDFD)
pub const so_passrights = SocketOption(C.SO_PASSRIGHTS)
pub const so_passsec = SocketOption(C.SO_PASSSEC)
pub const so_peek_off = SocketOption(C.SO_PEEK_OFF)
pub const so_peercred = SocketOption(C.SO_PEERCRED)
pub const so_peergroups = SocketOption(C.SO_PEERGROUPS)
pub const so_peername = SocketOption(C.SO_PEERNAME)
pub const so_peerpidfd = SocketOption(C.SO_PEERPIDFD)
pub const so_peersec = SocketOption(C.SO_PEERSEC)
pub const so_prefer_busy_poll = SocketOption(C.SO_PREFER_BUSY_POLL)
pub const so_priority = SocketOption(C.SO_PRIORITY)
pub const so_protocol = SocketOption(C.SO_PROTOCOL)
pub const so_rcvbufforce = SocketOption(C.SO_RCVBUFFORCE)
pub const so_rcvbuf = SocketOption(C.SO_RCVBUF)
pub const so_rcvlowat = SocketOption(C.SO_RCVLOWAT)
pub const so_rcvmark = SocketOption(C.SO_RCVMARK)
pub const so_rcvpriority = SocketOption(C.SO_RCVPRIORITY)
pub const so_rcvtimeo = SocketOption(C.SO_RCVTIMEO)
pub const so_rcvtimeo_new = SocketOption(C.SO_RCVTIMEO_NEW)
pub const so_rcvtimeo_old = SocketOption(C.SO_RCVTIMEO_OLD)
pub const so_reserve_mem = SocketOption(C.SO_RESERVE_MEM)
pub const so_reuseaddr = SocketOption(C.SO_REUSEADDR)
pub const so_reuseport = SocketOption(C.SO_REUSEPORT)
pub const so_rxq_ovfl = SocketOption(C.SO_RXQ_OVFL)
pub const so_security_authentication = SocketOption(C.SO_SECURITY_AUTHENTICATION)
pub const so_security_encryption_network = SocketOption(C.SO_SECURITY_ENCRYPTION_NETWORK)
pub const so_security_encryption_transport = SocketOption(C.SO_SECURITY_ENCRYPTION_TRANSPORT)
pub const so_select_err_queue = SocketOption(C.SO_SELECT_ERR_QUEUE)
pub const so_sndbufforce = SocketOption(C.SO_SNDBUFFORCE)
pub const so_sndbuf = SocketOption(C.SO_SNDBUF)
pub const so_sndlowat = SocketOption(C.SO_SNDLOWAT)
pub const so_sndtimeo = SocketOption(C.SO_SNDTIMEO)
pub const so_sndtimeo_new = SocketOption(C.SO_SNDTIMEO_NEW)
pub const so_sndtimeo_old = SocketOption(C.SO_SNDTIMEO_OLD)
pub const so_timestamping = SocketOption(C.SO_TIMESTAMPING)
pub const so_timestamping_new = SocketOption(C.SO_TIMESTAMPING_NEW)
pub const so_timestamping_old = SocketOption(C.SO_TIMESTAMPING_OLD)
pub const so_timestampns = SocketOption(C.SO_TIMESTAMPNS)
pub const so_timestampns_new = SocketOption(C.SO_TIMESTAMPNS_NEW)
pub const so_timestampns_old = SocketOption(C.SO_TIMESTAMPNS_OLD)
pub const so_timestamp = SocketOption(C.SO_TIMESTAMP)
pub const so_timestamp_new = SocketOption(C.SO_TIMESTAMP_NEW)
pub const so_timestamp_old = SocketOption(C.SO_TIMESTAMP_OLD)
pub const so_txrehash = SocketOption(C.SO_TXREHASH)
pub const so_txtime = SocketOption(C.SO_TXTIME)
pub const so_type = SocketOption(C.SO_TYPE)
pub const so_wifi_status = SocketOption(C.SO_WIFI_STATUS)
pub const so_zerocopy = SocketOption(C.SO_ZEROCOPY)
-10
View File
@@ -1,10 +0,0 @@
module netio
/*
Common socket types.
*/
pub const sock_stream = SocketType(C.SOCK_STREAM)
pub const sock_dgram = SocketType(C.SOCK_DGRAM)
pub const sock_seqpacket = SocketType(C.SOCK_SEQPACKET)
pub const sock_raw = SocketType(C.SOCK_RAW)
-13
View File
@@ -1,13 +0,0 @@
module netio
/*
Socket types defined on FreeBSD.
*/
pub const sock_stream = SocketType(C.SOCK_STREAM)
pub const sock_dgram = SocketType(C.SOCK_DGRAM)
pub const sock_raw = SocketType(C.SOCK_RAW)
pub const sock_seqpacket = SocketType(C.SOCK_SEQPACKET)
pub const sock_cloexec = SocketType(C.SOCK_CLOEXEC)
pub const sock_clofork = SocketType(C.SOCK_CLOFORK)
pub const sock_nonblock = SocketType(C.SOCK_NONBLOCK)
-13
View File
@@ -1,13 +0,0 @@
module netio
/*
Socket types defined on Linux.
*/
pub const sock_stream = SocketType(C.SOCK_STREAM)
pub const sock_dgram = SocketType(C.SOCK_DGRAM)
pub const sock_seqpacket = SocketType(C.SOCK_SEQPACKET)
pub const sock_raw = SocketType(C.SOCK_RAW)
pub const sock_rdm = SocketType(C.SOCK_RDM)
pub const sock_nonblock = SocketType(C.SOCK_NONBLOCK)
pub const sock_cloexec = SocketType(C.SOCK_CLOEXEC)
+20 -11
View File
@@ -13,7 +13,7 @@ fn C.accept(i32, voidptr, voidptr) i32
fn C.shutdown(i32, i32) i32 fn C.shutdown(i32, i32) i32
fn C.close(i32) i32 fn C.close(i32) i32
fn C.setsockopt(i32, i32, i32, voidptr, i32) i32 fn C.setsockopt(i32, i32, i32, voidptr, i32) i32
fn C.getsockopt(i32, i32, i32, voidptr, i32) i32 fn C.getsockopt(i32, i32, i32, voidptr, voidptr) i32
struct C.sockaddr_storage {} struct C.sockaddr_storage {}
@@ -25,8 +25,8 @@ pub:
// Socket.new creates new socket. // Socket.new creates new socket.
// See [socket(7)](https://www.man7.org/linux/man-pages/man7/socket.7.html) and // See [socket(7)](https://www.man7.org/linux/man-pages/man7/socket.7.html) and
// [socket(3)](https://man7.org/linux/man-pages/man3/socket.3p.html) for details. // [socket(3)](https://man7.org/linux/man-pages/man3/socket.3p.html) for details.
pub fn Socket.new(domain AddrFamily, typ SocketType, protocol Protocol) !Socket { pub fn Socket.new(domain AddrFamily, st SocketType, proto Protocol) !Socket {
fd := C.socket(i32(domain), i32(typ), i32(protocol)) fd := C.socket(i32(domain), i32(st), i32(proto))
if fd == -1 { if fd == -1 {
return os.last_error() return os.last_error()
} }
@@ -42,9 +42,9 @@ pub fn (s Socket) type_of() !SocketType {
// Socket shutdown modes. See [shutdown(3p)](https://man7.org/linux/man-pages/man3/shutdown.3p.html) for details. // Socket shutdown modes. See [shutdown(3p)](https://man7.org/linux/man-pages/man3/shutdown.3p.html) for details.
pub enum Shutdown { pub enum Shutdown {
read = C.SHUT_RD read
write = C.SHUT_WR write
read_and_write = C.SHUT_RDWR read_and_write
} }
// connect connects a socket. // connect connects a socket.
@@ -86,16 +86,25 @@ pub fn (s Socket) accept() !(Socket, SocketAddr) {
return sock, sock_addr return sock, sock_addr
} }
// set_option sets the socket option. // set_option sets the socket option. See [socket(7)](https://man7.org/linux/man-pages/man7/socket.7.html)
pub fn (s Socket) set_option(level SocketLevel, option SocketOption, value int) ! { // and [setsockopt(3p)](https://man7.org/linux/man-pages/man3/setsockopt.3p.html) for details.
if C.setsockopt(s.fd, i32(level), i32(option), i32(value), sizeof(value)) == -1 { pub fn (s Socket) set_option(level SocketLevel, option SocketOption, value voidptr) ! {
if C.setsockopt(s.fd, i32(level), i32(option), value, sizeof(value)) == -1 {
return os.last_error() return os.last_error()
} }
} }
// get_option gets the socket option as int. // get_option gets the socket option. See [socket(7)](https://man7.org/linux/man-pages/man7/socket.7.html)
// and [getsockopt(3p)](https://man7.org/linux/man-pages/man3/getsockopt.3p.html) for details.
pub fn (s Socket) get_option(level SocketLevel, option SocketOption, mut value voidptr, mut size voidptr) ! {
if C.getsockopt(s.fd, i32(level), i32(option), value, size) == -1 {
return os.last_error()
}
}
// get_option gets the socket option as int. The same as `get_option`, but always returns int.
pub fn (s Socket) get_option_int(level SocketLevel, option SocketOption) !int { pub fn (s Socket) get_option_int(level SocketLevel, option SocketOption) !int {
mut result := 0 mut result := -1
if C.getsockopt(s.fd, i32(level), i32(option), &result, sizeof(result)) == -1 { if C.getsockopt(s.fd, i32(level), i32(option), &result, sizeof(result)) == -1 {
return os.last_error() return os.last_error()
} }
+7 -100
View File
@@ -1,24 +1,6 @@
module netio module netio
import encoding.binary import encoding.binary
import os
#include <netdb.h>
struct C.addrinfo {
mut:
ai_flags i32
ai_family i32
ai_socktype i32
ai_protocol i32
ai_addrlen i32
ai_addr voidptr
ai_canonname voidptr
ai_next voidptr
}
fn C.getaddrinfo(&char, &char, &C.addrinfo, &&C.addrinfo) i32
fn C.freeaddrinfo(&C.addrinfo)
// max_unix_path_size value is used to pad the sockaddr_un struct. // max_unix_path_size value is used to pad the sockaddr_un struct.
const max_unix_path_size = $if linux { const max_unix_path_size = $if linux {
@@ -29,83 +11,6 @@ const max_unix_path_size = $if linux {
104 104
} }
// AddrInfo represents the [addrinfo](https://man7.org/linux/man-pages/man3/getaddrinfo.3.html).
pub struct AddrInfo {
pub:
flags int
family AddrFamily
sock_type SocketType
protocol Protocol
addr SocketAddr
canonical string
}
@[params]
pub struct TranslateAddrHints {
pub:
node ?string
service ?string
family AddrFamily = af_unspec
sock_type SocketType
protocol Protocol
flags int
}
// translate_addr translates the network address. This is a low-level wrapper around
// the [getaddrinfo(3)](https://man7.org/linux/man-pages/man3/getaddrinfo.3.html) C API.
// Example:
// ```v
// import os
// import netio
//
// // Resolve the host FQND
// addr_info := netio.translate_addr(node: os.hostname()!, flags: ai_canonname)!
// for addr in addr_info {
// println(addr.canonical)
// }
// ```
pub fn translate_addr(hints TranslateAddrHints) ![]AddrInfo {
mut hints_ := C.addrinfo{}
unsafe { vmemset(&hints_, 0, int(sizeof(hints_))) }
hints_.ai_family = i32(hints.family)
hints_.ai_socktype = i32(hints.sock_type)
hints_.ai_protocol = i32(hints.protocol)
hints_.ai_flags = i32(hints.flags)
mut node := unsafe { nil }
if hints.node != none {
node = &char(hints.node.str)
}
mut service := unsafe { nil }
if hints.service != none {
service = &char(hints.service.str)
}
mut results := &C.addrinfo(unsafe { nil })
if C.getaddrinfo(node, service, &hints_, &results) == -1 {
return os.last_error()
}
defer {
C.freeaddrinfo(results)
}
mut addrs := []AddrInfo{}
for result := unsafe { results }; !isnil(result); result = result.ai_next {
addrs << AddrInfo{
flags: int(result.ai_flags)
family: int(result.ai_family)
sock_type: int(result.ai_socktype)
protocol: int(result.ai_protocol)
addr: unsafe { SocketAddr.from_ptr(result.ai_addr, result.ai_addrlen)! }
canonical: if isnil(result.ai_canonname) {
''
} else {
unsafe {
cstring_to_vstring(result.ai_canonname)
}
}
}
}
return addrs
}
// SocketAddr.ipv4 creates new AF_INET socket address. // SocketAddr.ipv4 creates new AF_INET socket address.
// addr must be set in network (big-endian) byte order. // addr must be set in network (big-endian) byte order.
pub fn SocketAddr.ipv4(addr [4]u8, port u16) SocketAddr { pub fn SocketAddr.ipv4(addr [4]u8, port u16) SocketAddr {
@@ -149,9 +54,6 @@ pub fn SocketAddr.unix(path string) !SocketAddr {
// the address itself, you need to do that manually. The benefit is that you can create the // the address itself, you need to do that manually. The benefit is that you can create the
// any kind of socket address. // any kind of socket address.
// //
// Note: This function sets the address family struct field for you, it is always first
// and 2-byte size (`u16` type).
//
// SocketAddr is a "constructor" for // SocketAddr is a "constructor" for
// [sockaddr(3type)](https://www.man7.org/linux/man-pages/man3/sockaddr.3type.html) objects. // [sockaddr(3type)](https://www.man7.org/linux/man-pages/man3/sockaddr.3type.html) objects.
// Use this function only if you understand what you do. You must manually write the data // Use this function only if you understand what you do. You must manually write the data
@@ -169,7 +71,7 @@ pub fn SocketAddr.unix(path string) !SocketAddr {
// Data must be padded to sockaddr struct size which is 16 bytes. Each field is then // 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 // 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 // (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. // address and port are written using the network (big-endian) byte order.
// //
// Example: // Example:
// ```v // ```v
@@ -194,6 +96,7 @@ pub fn SocketAddr.unix(path string) !SocketAddr {
// sa.push(binary.big_endian_get_u16(u16(1080)))! // sa.push(binary.big_endian_get_u16(u16(1080)))!
// sa.push([u8(127), 0, 0, 1])! // sa.push([u8(127), 0, 0, 1])!
// } // }
// println(sa)
// ``` // ```
@[unsafe] @[unsafe]
pub fn SocketAddr.new(af AddrFamily, size isize) SocketAddr { pub fn SocketAddr.new(af AddrFamily, size isize) SocketAddr {
@@ -276,6 +179,10 @@ pub fn (a SocketAddr) u8_array() []u8 {
} }
// str returns the string representation of socket address. // str returns the string representation of socket address.
// Supported address families are AF_INET, AF_INET6, and AF_UNIX.
// For others a string like 'SocketAddr(0x00000000)' will be returned.
// Examples: '172.16.16.132:1080', '[fdf1:72d1:0033:0000:0000:0000:0000:0247]:25535,
// '/run/app.sock'. See also `translate_name()`.
pub fn (a SocketAddr) str() string { pub fn (a SocketAddr) str() string {
match a.family() { match a.family() {
af_inet { af_inet {
@@ -320,7 +227,7 @@ pub fn (a SocketAddr) str() string {
return res return res
} }
else { else {
return 'SocketAddr(${a.data.str()})' return 'SocketAddr(0x${a.data:08x})'
} }
} }
} }
-7
View File
@@ -1,7 +0,0 @@
module netio
/*
Common socket levels.
*/
pub const sol_socket = C.SOL_SOCKET
-35
View File
@@ -1,35 +0,0 @@
module netio
/*
Socket levels defined on Linux.
*/
pub const sol_aal = SocketOption(C.SOL_AAL)
pub const sol_alg = SocketOption(C.SOL_ALG)
pub const sol_atm = SocketOption(C.SOL_ATM)
pub const sol_bluetooth = SocketOption(C.SOL_BLUETOOTH)
pub const sol_caif = SocketOption(C.SOL_CAIF)
pub const sol_dccp = SocketOption(C.SOL_DCCP)
pub const sol_decnet = SocketOption(C.SOL_DECNET)
pub const sol_irda = SocketOption(C.SOL_IRDA)
pub const sol_iucv = SocketOption(C.SOL_IUCV)
pub const sol_kcm = SocketOption(C.SOL_KCM)
pub const sol_llc = SocketOption(C.SOL_LLC)
pub const sol_mctp = SocketOption(C.SOL_MCTP)
pub const sol_mptcp = SocketOption(C.SOL_MPTCP)
pub const sol_netbeui = SocketOption(C.SOL_NETBEUI)
pub const sol_netlink = SocketOption(C.SOL_NETLINK)
pub const sol_nfc = SocketOption(C.SOL_NFC)
pub const sol_packet = SocketOption(C.SOL_PACKET)
pub const sol_pnpipe = SocketOption(C.SOL_PNPIPE)
pub const sol_pppol2tp = SocketOption(C.SOL_PPPOL2TP)
pub const sol_raw = SocketOption(C.SOL_RAW)
pub const sol_rds = SocketOption(C.SOL_RDS)
pub const sol_rxrpc = SocketOption(C.SOL_RXRPC)
pub const sol_smc = SocketOption(C.SOL_SMC)
pub const sol_socket = SocketOption(C.SOL_SOCKET)
pub const sol_tipc = SocketOption(C.SOL_TIPC)
pub const sol_tls = SocketOption(C.SOL_TLS)
pub const sol_vsock = SocketOption(C.SOL_VSOCK)
pub const sol_x25 = SocketOption(C.SOL_X25)
pub const sol_xdp = SocketOption(C.SOL_XDP)
+114 -8
View File
@@ -2,13 +2,119 @@ module netio
import os import os
fn C.getnameinfo(voidptr, i32, &char, i32, &char, i32, i32) i32 #include <netdb.h>
pub fn name(sa SocketAddr) !(string, string) { fn C.getaddrinfo(&char, &char, &C.addrinfo, &&C.addrinfo) i32
mut addr := []u8{len: 16} fn C.freeaddrinfo(&C.addrinfo)
mut srv := []u8{len: 2} fn C.getnameinfo(voidptr, i32, &char, i32, &char, i32, i32) i32
if C.getnameinfo(sa.ptr(), sa.size(), addr.data, 16, srv.data, 2, C.NI_NUMERICHOST) == -1 { fn C.gai_strerror(i32) &char
return os.last_error()
} struct C.addrinfo {
return addr.str(), '' mut:
ai_flags i32
ai_family i32
ai_socktype i32
ai_protocol i32
ai_addrlen i32
ai_addr voidptr
ai_canonname voidptr
ai_next voidptr
}
// AddrInfo represents the [addrinfo](https://man7.org/linux/man-pages/man3/getaddrinfo.3.html) struct.
pub struct AddrInfo {
pub:
flags AddrInfoFlag
family AddrFamily
sock_type SocketType
protocol Protocol
addr SocketAddr
canonical string
}
@[params]
pub struct TranslateAddrParams {
pub:
node ?string
service ?string
family AddrFamily = af_unspec
sock_type SocketType
protocol Protocol
flags AddrInfoFlag
}
// translate_addr translates the network address. This is a low-level wrapper around
// the [getaddrinfo(3)](https://man7.org/linux/man-pages/man3/getaddrinfo.3.html) C API.
pub fn translate_addr(hints TranslateAddrParams) ![]AddrInfo {
mut hints_ := C.addrinfo{}
unsafe { vmemset(&hints_, 0, int(sizeof(hints_))) }
hints_.ai_family = i32(hints.family)
hints_.ai_socktype = i32(hints.sock_type)
hints_.ai_protocol = i32(hints.protocol)
hints_.ai_flags = i32(hints.flags)
mut node := unsafe { nil }
if hints.node != none {
node = &char(hints.node.str)
}
mut service := unsafe { nil }
if hints.service != none {
service = &char(hints.service.str)
}
mut results := &C.addrinfo(unsafe { nil })
code := C.getaddrinfo(node, service, &hints_, &results)
if code != 0 {
if code == C.EAI_SYSTEM {
return os.last_error()
}
msg := C.gai_strerror(code)
return error_with_code(unsafe { cstring_to_vstring(msg) }, code)
}
defer {
C.freeaddrinfo(results)
}
mut addrs := []AddrInfo{}
for result := unsafe { results }; !isnil(result); result = result.ai_next {
addrs << AddrInfo{
flags: int(result.ai_flags)
family: int(result.ai_family)
sock_type: int(result.ai_socktype)
protocol: int(result.ai_protocol)
addr: unsafe { SocketAddr.from_ptr(result.ai_addr, result.ai_addrlen)! }
canonical: if isnil(result.ai_canonname) {
''
} else {
unsafe {
cstring_to_vstring(result.ai_canonname)
}
}
}
}
return addrs
}
@[params]
pub struct TranslateNameParams {
pub:
flags NameInfoFlag
}
// translate_name does address-to-name translation and returns the host and service names.
// See [getnameinfo(3)](https://man7.org/linux/man-pages/man3/getnameinfo.3.html) for details.
pub fn translate_name(sa SocketAddr, params TranslateNameParams) !(string, string) {
mut addr := []u8{len: C.NI_MAXHOST}
mut serv := []u8{len: C.NI_MAXSERV}
code := C.getnameinfo(sa.ptr(), sa.size(), addr.data, addr.len, serv.data, serv.len,
params.flags)
if code != 0 {
if code == C.EAI_SYSTEM {
return os.last_error()
}
msg := C.gai_strerror(code)
return error_with_code(unsafe { cstring_to_vstring(msg) }, code)
}
return unsafe {
tos_clone(&u8(addr.data))
}, unsafe {
tos_clone(&u8(serv.data))
}
} }