From 2d2281b8cc5c99ee47f56d65bb63501cd22510f6 Mon Sep 17 00:00:00 2001 From: ge Date: Sun, 12 Apr 2026 16:30:28 +0300 Subject: [PATCH] upd4 --- .vdocignore | 1 + README.md | 11 +- af_darwin.c.v | 44 --- af_default.c.v | 10 - af_freebsd.c.v | 96 ------- af_linux.c.v | 56 ---- ai_freebsd.c.v | 16 -- ai_linux.c.v | 13 - const_default.c.v | 17 ++ const_freebsd.c.v | 422 ++++++++++++++++++++++++++++ const_linux.c.v | 354 +++++++++++++++++++++++ main.vv => examples/echo_server.c.v | 10 +- mkconst.sh | 45 +++ netio.v | 13 +- protocol/README.md | 2 +- so_darwin.c.v | 47 ---- so_freebsd.c.v | 53 ---- so_linux.c.v | 94 ------- sock_default.c.v | 10 - sock_freebsd.c.v | 13 - sock_linux.c.v | 13 - socket.c.v | 31 +- socket_addr.c.v | 107 +------ sol_default.c.v | 7 - sol_linux.c.v | 35 --- translate.c.v | 122 +++++++- 26 files changed, 1002 insertions(+), 640 deletions(-) create mode 100644 .vdocignore delete mode 100644 af_darwin.c.v delete mode 100644 af_default.c.v delete mode 100644 af_freebsd.c.v delete mode 100644 af_linux.c.v delete mode 100644 ai_freebsd.c.v delete mode 100644 ai_linux.c.v create mode 100644 const_default.c.v create mode 100644 const_freebsd.c.v create mode 100644 const_linux.c.v rename main.vv => examples/echo_server.c.v (72%) create mode 100755 mkconst.sh delete mode 100644 so_darwin.c.v delete mode 100644 so_freebsd.c.v delete mode 100644 so_linux.c.v delete mode 100644 sock_default.c.v delete mode 100644 sock_freebsd.c.v delete mode 100644 sock_linux.c.v delete mode 100644 sol_default.c.v delete mode 100644 sol_linux.c.v diff --git a/.vdocignore b/.vdocignore new file mode 100644 index 0000000..d838da9 --- /dev/null +++ b/.vdocignore @@ -0,0 +1 @@ +examples/ diff --git a/README.md b/README.md index 53748cb..03fda7f 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,12 @@ # Networking Library for V -**netio** is a networking library for V programming language. -This implementation aims to be as flexible and portable. +**netio** is a flexible networking library for V programming language. 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. -* Supports any kind of: socket type, socket option, address family and protocol. +* Provides the low-level wrappers around C API. +* 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`. diff --git a/af_darwin.c.v b/af_darwin.c.v deleted file mode 100644 index 6a60756..0000000 --- a/af_darwin.c.v +++ /dev/null @@ -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) diff --git a/af_default.c.v b/af_default.c.v deleted file mode 100644 index 2830da0..0000000 --- a/af_default.c.v +++ /dev/null @@ -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) diff --git a/af_freebsd.c.v b/af_freebsd.c.v deleted file mode 100644 index b239173..0000000 --- a/af_freebsd.c.v +++ /dev/null @@ -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) diff --git a/af_linux.c.v b/af_linux.c.v deleted file mode 100644 index fb10869..0000000 --- a/af_linux.c.v +++ /dev/null @@ -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) diff --git a/ai_freebsd.c.v b/ai_freebsd.c.v deleted file mode 100644 index 5a2b407..0000000 --- a/ai_freebsd.c.v +++ /dev/null @@ -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 diff --git a/ai_linux.c.v b/ai_linux.c.v deleted file mode 100644 index ed137e3..0000000 --- a/ai_linux.c.v +++ /dev/null @@ -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 diff --git a/const_default.c.v b/const_default.c.v new file mode 100644 index 0000000..3a253f8 --- /dev/null +++ b/const_default.c.v @@ -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) diff --git a/const_freebsd.c.v b/const_freebsd.c.v new file mode 100644 index 0000000..91df490 --- /dev/null +++ b/const_freebsd.c.v @@ -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) diff --git a/const_linux.c.v b/const_linux.c.v new file mode 100644 index 0000000..a1f694e --- /dev/null +++ b/const_linux.c.v @@ -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) diff --git a/main.vv b/examples/echo_server.c.v similarity index 72% rename from main.vv rename to examples/echo_server.c.v index ded0adc..8c2ea67 100644 --- a/main.vv +++ b/examples/echo_server.c.v @@ -13,7 +13,7 @@ fn main() { for a in ai { 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.close()! continue @@ -37,9 +37,11 @@ fn main() { eprintln('ACCEPT: ${err}') exit(1) } - eprintln(netio.name(remote_addr)!) - eprintln('Remote address: ${remote_addr} | ${remote_addr.family()} | ${remote_addr.size()}') - eprintln(remote_addr.u8_array()) + eprintln(netio.translate_name(remote_addr, + flags: netio.ni_numerichost | netio.ni_numericserv + )!) + eprintln(netio.translate_name(remote_addr)!) + eprintln('Remote address: ${remote_addr}') conn.close()! } } diff --git a/mkconst.sh b/mkconst.sh new file mode 100755 index 0000000..6cafa0e --- /dev/null +++ b/mkconst.sh @@ -0,0 +1,45 @@ +#!/bin/sh + +program_linux=' +#include +#include +#include +' + +program_freebsd=' +#include +#include +#include +' + +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 diff --git a/netio.v b/netio.v index 17f7974..ea612f6 100644 --- a/netio.v +++ b/netio.v @@ -4,9 +4,8 @@ module netio // See [address_families(7)](https://www.man7.org/linux/man-pages/man7/address_families.7.html). pub type AddrFamily = int -// The protocol number type. -// 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. +// The protocol number. +// See [protocols(5)](https://man7.org/linux/man-pages/man5/protocols.5.html). pub type Protocol = int // The socket type. @@ -17,3 +16,11 @@ pub type SocketLevel = int // The socket option type. 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 diff --git a/protocol/README.md b/protocol/README.md index 9661bc8..f0de0f1 100644 --- a/protocol/README.md +++ b/protocol/README.md @@ -1,6 +1,6 @@ # 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) and [getprotoent(3)](https://man7.org/linux/man-pages/man3/getprotoent.3.html) diff --git a/so_darwin.c.v b/so_darwin.c.v deleted file mode 100644 index 35cf7ff..0000000 --- a/so_darwin.c.v +++ /dev/null @@ -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) diff --git a/so_freebsd.c.v b/so_freebsd.c.v deleted file mode 100644 index ea6c3c0..0000000 --- a/so_freebsd.c.v +++ /dev/null @@ -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) diff --git a/so_linux.c.v b/so_linux.c.v deleted file mode 100644 index c233dae..0000000 --- a/so_linux.c.v +++ /dev/null @@ -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) diff --git a/sock_default.c.v b/sock_default.c.v deleted file mode 100644 index 6adbafc..0000000 --- a/sock_default.c.v +++ /dev/null @@ -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) diff --git a/sock_freebsd.c.v b/sock_freebsd.c.v deleted file mode 100644 index df26918..0000000 --- a/sock_freebsd.c.v +++ /dev/null @@ -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) diff --git a/sock_linux.c.v b/sock_linux.c.v deleted file mode 100644 index 50056e6..0000000 --- a/sock_linux.c.v +++ /dev/null @@ -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) diff --git a/socket.c.v b/socket.c.v index 02414f6..46d7014 100644 --- a/socket.c.v +++ b/socket.c.v @@ -13,7 +13,7 @@ fn C.accept(i32, voidptr, voidptr) i32 fn C.shutdown(i32, i32) i32 fn C.close(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 {} @@ -25,8 +25,8 @@ pub: // Socket.new creates new socket. // 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. -pub fn Socket.new(domain AddrFamily, typ SocketType, protocol Protocol) !Socket { - fd := C.socket(i32(domain), i32(typ), i32(protocol)) +pub fn Socket.new(domain AddrFamily, st SocketType, proto Protocol) !Socket { + fd := C.socket(i32(domain), i32(st), i32(proto)) if fd == -1 { 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. pub enum Shutdown { - read = C.SHUT_RD - write = C.SHUT_WR - read_and_write = C.SHUT_RDWR + read + write + read_and_write } // connect connects a socket. @@ -86,16 +86,25 @@ pub fn (s Socket) accept() !(Socket, SocketAddr) { return sock, sock_addr } -// set_option sets the socket option. -pub fn (s Socket) set_option(level SocketLevel, option SocketOption, value int) ! { - if C.setsockopt(s.fd, i32(level), i32(option), i32(value), sizeof(value)) == -1 { +// set_option sets the socket option. See [socket(7)](https://man7.org/linux/man-pages/man7/socket.7.html) +// and [setsockopt(3p)](https://man7.org/linux/man-pages/man3/setsockopt.3p.html) for details. +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() } } -// 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 { - mut result := 0 + mut result := -1 if C.getsockopt(s.fd, i32(level), i32(option), &result, sizeof(result)) == -1 { return os.last_error() } diff --git a/socket_addr.c.v b/socket_addr.c.v index 131cf5d..5240ff3 100644 --- a/socket_addr.c.v +++ b/socket_addr.c.v @@ -1,24 +1,6 @@ module netio import encoding.binary -import os - -#include - -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. const max_unix_path_size = $if linux { @@ -29,83 +11,6 @@ const max_unix_path_size = $if linux { 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. // addr must be set in network (big-endian) byte order. 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 // 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 // [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 @@ -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 // 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. +// address and port are written using the network (big-endian) byte order. // // Example: // ```v @@ -194,6 +96,7 @@ pub fn SocketAddr.unix(path string) !SocketAddr { // sa.push(binary.big_endian_get_u16(u16(1080)))! // sa.push([u8(127), 0, 0, 1])! // } +// println(sa) // ``` @[unsafe] 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. +// 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 { match a.family() { af_inet { @@ -320,7 +227,7 @@ pub fn (a SocketAddr) str() string { return res } else { - return 'SocketAddr(${a.data.str()})' + return 'SocketAddr(0x${a.data:08x})' } } } diff --git a/sol_default.c.v b/sol_default.c.v deleted file mode 100644 index 227b79a..0000000 --- a/sol_default.c.v +++ /dev/null @@ -1,7 +0,0 @@ -module netio - -/* - Common socket levels. -*/ - -pub const sol_socket = C.SOL_SOCKET diff --git a/sol_linux.c.v b/sol_linux.c.v deleted file mode 100644 index bdb3ab8..0000000 --- a/sol_linux.c.v +++ /dev/null @@ -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) diff --git a/translate.c.v b/translate.c.v index 73aa98d..ae636f1 100644 --- a/translate.c.v +++ b/translate.c.v @@ -2,13 +2,119 @@ module netio import os -fn C.getnameinfo(voidptr, i32, &char, i32, &char, i32, i32) i32 +#include -pub fn name(sa SocketAddr) !(string, string) { - mut addr := []u8{len: 16} - mut srv := []u8{len: 2} - if C.getnameinfo(sa.ptr(), sa.size(), addr.data, 16, srv.data, 2, C.NI_NUMERICHOST) == -1 { - return os.last_error() - } - return addr.str(), '' +fn C.getaddrinfo(&char, &char, &C.addrinfo, &&C.addrinfo) i32 +fn C.freeaddrinfo(&C.addrinfo) +fn C.getnameinfo(voidptr, i32, &char, i32, &char, i32, i32) i32 +fn C.gai_strerror(i32) &char + +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 +} + +// 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)) + } }