Back to Wasi

POSIX Compatibility

proposals/sockets/Posix-compatibility.md

0.2.1153.3 KB
Original Source

POSIX Compatibility

This document provides an overview of the POSIX interface along with common non-standard extensions and their mapping to functionalities provided by this proposal.

General

I/O completion polling (poll, select, pselect, epoll_* (non-standard), kqueue (non-standard)) <a name="select"></a>

Use the various subscribe methods to obtain a pollable handle. Then use that to wait for IO events using the wasi:io/poll interface.

Non-blocking mode (FIONBIO, SOCK_NONBLOCK, O_NONBLOCK) <a name="nonblock"></a>

All WASI sockets are non-blocking and can not be configured to block. Blocking behaviour can be recreated in userland (or in wasi-libc) by calling pollable::block on the relevant pollable.

TCP urgent data (sockatmark, MSG_OOB, SO_OOBINLINE, SIOCATMARK) <a name="oob"></a>

Out-of-band (OOB) data is currently not included in this proposal. Application-level usage of the TCP "urgent" flag is rare in practice and discouraged in general. Including it in WASI would probably interfere with the ability to use WASI/ComponentModel streams.

Peeking (MSG_PEEK) <a name="peek"></a>

Peeking support is not provided by this proposal directly. Including it in WASI would probably interfere with the ability to use WASI/ComponentModel streams.

Support for it might be able to be recreated in userland (or in wasi-libc).

Writing to closed streams (SIGPIPE, SO_NOSIGPIPE) <a name="sigpipe"></a>

WASI has no concept of 'signals'. Implementations that require it are encouraged to set the SO_NOSIGPIPE option to true, to increase cross-platform consistency. Writing to a closed stream in WASI returns a regular error.

Close-on-exec (FD_CLOEXEC, SOCK_CLOEXEC, O_CLOEXEC) <a name="cloexec"></a>

Not included in proposal. WASI has no concept of UNIX-style processes.

Functions

socket

connect

bind

listen

accept, accept4 (non-standard)

To collect the remote address, call tcp-socket::remote-address on the newly accepted client socket.

Some platforms provide an accept4 variant with additional flags. None of these flags make sense in the context of this proposal. See SOCK_NONBLOCK & SOCK_CLOEXEC.

getsockname, getpeername

read, readv, recv, recvfrom, recvmsg, recvmmsg (non-standard)

TCP sockets can be read using the input-stream returned by connect or accept. UDP sockets can be read using the incoming-datagram-stream returned by udp-socket::stream.

The various POSIX functions should be implementable on top of these two resources.

None of the flags are directly present in WASI Sockets:

  • MSG_DONTWAIT: This is always the case.
  • MSG_OOB on TCP sockets: Not supported
  • MSG_OOB on UDP sockets: N/A
  • MSG_PEEK: No direct support
  • MSG_TRUNC on TCP sockets: N/A
  • MSG_TRUNC on UDP sockets: Not needed, the returned data array always has the exact perfect size.
  • MSG_WAITALL on TCP sockets: Emulatable in userspace.
  • MSG_WAITALL on UDP sockets: N/A
  • MSG_EOR: N/A (not supported on TCP & UDP sockets)
  • MSG_CMSG_CLOEXEC: N/A (only used on Unix domain sockets)

Receiving ancillary messages: None supported as of yet. But see the various "RECV" socket options below.

write, writev, send, sendto, sendmsg, sendmmsg (non-standard)

TCP sockets can be written to using the output-stream returned by connect or accept. UDP sockets can be written to using the outgoing-datagram-stream returned by udp-socket::stream.

The various POSIX functions should be implementable on top of these two resources.

None of the flags are directly present in WASI Sockets:

  • MSG_DONTROUTE: Not included in proposal at the moment.
  • MSG_DONTWAIT: This is always the case.
  • MSG_NOSIGNAL: This is always the case.
  • MSG_OOB on TCP sockets: Not supported
  • MSG_OOB on UDP sockets: N/A
  • MSG_EOR: N/A (not supported on TCP & UDP sockets)

Sending ancillary messages: None supported as of yet.

sendfile (non-standard)

  • TCP: Part of the wasi:io/streams proposal as output-stream::splice
  • UDP: N/A

shutdown

sockatmark

  • TCP: Not supported, see OOB.
  • UDP: N/A

close

Dropping the socket resource effectively performs a close.

socketpair, connectat (non-standard), bindat (non-standard)

Specifically for UNIX domain sockets. Out of scope for this proposal.

fcntl

ioctl

getsockopt, setsockopt

Socket options have been split out into distinct functions. See table below.

Socket options

POSIX defines the signatures of the getsockopt & setsockopt functions, but does not provide much guidance on the individual socket options themselves. Because of this lack of a central authority, a list has been compiled of the options that are used "in the wild".

The results are not intended to be an exhaustive overview of all possible network applications, but rather to provide input on which options are worth standardizing in WASI.

Additionally, most columns have been populated semi-automatically by grepping through the respective codebases. The results have not been manually verified and therefore may not be 100% correct.

Legend:

  • ✅ = Included in proposal.
  • ⚠️ = Partially supported.
  • ⛔ = Consciously decided not to include in WASI. See notes for explanation.
  • ❔ = Not included (yet), for no particular reason.
OptionNotesUsed/implemented by
SO_DOMAIN
<sub>SO_PROTOCOL_INFO on Windows</sub>tcp-socket::address-family
udp-socket::address-familylinux, windows, freebsd, .net
SO_ACCEPTCONNtcp-socket::is-listeningposix, linux, windows, macos, freebsd, .net
IP_TTLtcp-socket::(set-)hop-limit
udp-socket::(set-)unicast-hop-limitlinux, windows, macos, freebsd, jvm, .net, rust, libuv
IPV6_UNICAST_HOPStcp-socket::(set-)hop-limit
udp-socket::(set-)unicast-hop-limitposix, linux, windows, macos, freebsd, jvm, .net, libuv
SO_RCVBUFtcp-socket::(set-)receive-buffer-size
udp-socket::(set-)receive-buffer-sizeposix, linux, windows, macos, freebsd, jvm, .net, libuv, go, nginx, msquic
SO_SNDBUFtcp-socket::(set-)send-buffer-size
udp-socket::(set-)send-buffer-sizeposix, linux, windows, macos, freebsd, jvm, .net, libuv, go, nginx, curl
SO_KEEPALIVEtcp-socket::(set-)keep-alive-enabledposix, linux, windows, macos, freebsd, jvm, .net, libuv, go, openssl, nginx, curl, exim
TCP_KEEPIDLE
<sub>TCP_KEEPALIVE on MacOS</sub>tcp-socket::(set-)keep-alive-idle-timelinux, windows, macos, freebsd, jvm, .net, libuv, go, nginx, curl
TCP_KEEPINTVLtcp-socket::(set-)keep-alive-intervallinux, windows, macos, freebsd, jvm, .net, libuv, go, nginx, curl
TCP_KEEPCNTtcp-socket::(set-)keep-alive-countlinux, windows, macos, freebsd, jvm, .net, libuv, nginx
SO_REUSEADDR for TCPEnabled by default. See tcp-socket::bindposix, linux, windows, macos, freebsd, jvm, .net, libuv, go, openssl, nginx, curl, exim
⚠️IPV6_V6ONLYIn WASI this always true. #1posix, linux, windows, macos, freebsd, jvm, .net, libuv, go, openssl, curl, msquic, exim
SO_ERRORNot necessary. WIT has (or will have) native support for asynchronous results.posix, linux, windows, macos, freebsd, jvm, .net, rust, libuv, go, openssl, nginx, curl, msquic
SO_TYPECan be inferred from the socket resource type.posix, linux, windows, macos, freebsd, jvm, .net, go, openssl, nginx, curl, exim
SO_PROTOCOL
<sub>SO_PROTOCOL_INFO on Windows</sub>Can be inferred from the socket resource type.linux, windows, freebsd, .net, exim
IP_HDRINCLOut of scope. Raw sockets only.linux, windows, macos, freebsd, .net
IPV6_HDRINCLOut of scope. Raw sockets only.linux, windows, .net
SO_RCVTIMEOWASI sockets are always non-blocking. Timeouts can be recreated in libc.posix, linux, windows, macos, freebsd, jvm, .net, rust, openssl, curl
SO_SNDTIMEOWASI sockets are always non-blocking. Timeouts can be recreated in libc.posix, windows, macos, freebsd, .net, rust, openssl
SO_OOBINLINENot supported, see OOBposix, linux, windows, macos, freebsd, jvm, .net
SO_PEERCREDOut of scope; UNIX domain sockets only.linux, jvm, .net
SO_PEERSECOut of scope; UNIX domain sockets only.linux
SO_NOSIGPIPENot supported, see SIGPIPEmacos, freebsd, libuv, curl
IP_RECVPKTINFO
<sub>IP_PKTINFO on Linux & Windows</sub>
<sub>IP_RECVDSTADDR+IP_RECVIF on MacOS & FreeBSD</sub>#77linux, windows, macos, freebsd, .net, openssl, nginx, msquic
IPV6_RECVPKTINFO
<sub>IPV6_PKTINFO on Windows</sub>#77linux, windows, macos, freebsd, .net, openssl, nginx, msquic
IP_RECVTOS#78linux, windows, macos, freebsd, msquic
IPV6_RECVTCLASS#78linux, windows, macos, freebsd, msquic
IP_TOS#78linux, windows, macos, freebsd, jvm, .net, exim
IPV6_TCLASS#78linux, macos, freebsd, jvm, .net, exim
TCP_ECN_MODE#78macos
TCP_ENABLE_ECN#78macos
SO_LINGER#80posix, linux, windows, macos, freebsd, jvm, .net, rust, libuv, go, openssl, nginx
IP_DONTFRAG
<sub>IP_DONTFRAGMENT on Windows</sub>#79linux, windows, macos, freebsd, jvm, .net, openssl, nginx, msquic
IPV6_DONTFRAG#79linux, windows, macos, freebsd, jvm, .net, openssl, nginx, msquic
IP_MTU_DISCOVER#79linux, windows, openssl, nginx, curl, msquic
IPV6_MTU_DISCOVER#79linux, windows, openssl, nginx, curl, msquic
TCP_NODELAY#75posix, linux, windows, macos, freebsd, jvm, .net, rust, libuv, go, openssl, nginx, curl, exim
TCP_CORK
<sub>TCP_NOPUSH on MacOS & FreeBSD</sub>#75linux, macos, freebsd, nginx, exim
SO_REUSEADDR for UDP#74posix, linux, windows, macos, freebsd, jvm, .net, libuv, go, openssl, nginx, curl, exim
SO_EXCLUSIVEADDRUSE#74windows
SO_RANDOMIZE_PORT#74windows
SO_RANDOMPORT#74macos
IP_BIND_ADDRESS_NO_PORT#74linux, nginx, curl
SO_PORT_SCALABILITY#74windows
SO_REUSE_UNICASTPORT#74windows, .net
SO_REUSEPORT#74linux, macos, freebsd, .net, libuv, go, nginx, msquic
SO_REUSEPORT_LB#74freebsd, nginx
SO_ATTACH_REUSEPORT_CBPF#74linux, msquic
SO_ATTACH_REUSEPORT_EBPF#74linux, nginx
SO_DETACH_REUSEPORT_BPF#74linux
TCP_REUSPORT_LB_NUMA#74freebsd
SO_INCOMING_CPU#74linux
SO_INCOMING_NAPI_ID#74linux, jvm
SO_BINDTODEVICE#74linux, libuv, go, curl
SO_BINDTOIFINDEX#74linux
IP_UNICAST_IF#74linux, windows, msquic
IPV6_UNICAST_IF#74linux, windows, msquic
IP_BOUND_IF#74macos
IPV6_BOUND_IF#74macos
IP_FREEBIND#74linux
IPV6_FREEBIND#74linux
IP_TRANSPARENT#74linux, nginx
IPV6_TRANSPARENT#74linux, nginx
IP_BINDANY#74freebsd, nginx
IPV6_BINDANY#74freebsd, nginx
SO_REUSE_MULTICASTPORT#74, #73windows
SO_BROADCAST#73posix, linux, windows, macos, freebsd, jvm, .net, rust, libuv, go
MCAST_JOIN_GROUP
<sub>Supersedes: IP_ADD_MEMBERSHIP</sub>
<sub>Supersedes: IPV6_JOIN_GROUP</sub>
<sub>Supersedes: IPV6_ADD_MEMBERSHIP</sub>#73posix, linux, windows, macos, freebsd, jvm, .net, rust, libuv, go
MCAST_LEAVE_GROUP
<sub>Supersedes: IP_DROP_MEMBERSHIP</sub>
<sub>Supersedes: IPV6_LEAVE_GROUP</sub>
<sub>Supersedes: IPV6_DROP_MEMBERSHIP</sub>#73posix, linux, windows, macos, freebsd, jvm, .net, rust, libuv
MCAST_JOIN_SOURCE_GROUP
<sub>Supersedes: IP_ADD_SOURCE_MEMBERSHIP</sub>#73linux, windows, macos, freebsd, jvm, .net, libuv
MCAST_LEAVE_SOURCE_GROUP
<sub>Supersedes: IP_DROP_SOURCE_MEMBERSHIP</sub>#73linux, windows, macos, freebsd, jvm, .net, libuv
MCAST_BLOCK_SOURCE
<sub>Supersedes: IP_BLOCK_SOURCE</sub>#73linux, windows, macos, freebsd, jvm, .net
MCAST_UNBLOCK_SOURCE
<sub>Supersedes: IP_UNBLOCK_SOURCE</sub>#73linux, windows, macos, freebsd, jvm, .net
IP_MSFILTER#73linux, windows, macos, freebsd
IPV6_MSFILTER#73macos, freebsd
IP_MULTICAST_IF#73linux, windows, macos, freebsd, jvm, .net, libuv, go
IPV6_MULTICAST_IF#73posix, linux, windows, macos, freebsd, jvm, .net, libuv, go
IP_MULTICAST_LOOP#73linux, windows, macos, freebsd, jvm, .net, rust, libuv, go
IPV6_MULTICAST_LOOP#73posix, linux, windows, macos, freebsd, jvm, .net, rust, libuv, go
IP_MULTICAST_TTL#73linux, windows, macos, freebsd, jvm, .net, rust, libuv
IPV6_MULTICAST_HOPS#73posix, linux, windows, macos, freebsd, jvm, .net, libuv
IP_MULTICAST_ALL#73linux
IPV6_MULTICAST_ALL#73linux
IP_MULTICAST_IFINDEX#73macos
TCP_FASTOPEN#81linux, windows, macos, freebsd, openssl, nginx, exim
TCP_FASTOPEN_CONNECT#81linux, openssl, curl, exim
TCP_FASTOPEN_KEY#81linux
TCP_FASTOPEN_NO_COOKIE#81linux
TCP_FASTOPEN_FORCE_ENABLE#81macos
TCP_FASTOPEN_FORCE_HEURISTICS#81macos
SO_SNDLOWATNot usefully implemented on Linux & Windows.posix, linux, macos, freebsd, .net, nginx
SO_RCVLOWATposix, linux, macos, freebsd, .net
IP_RECVTTLlinux, windows, macos, freebsd
IPV6_RECVHOPLIMITlinux, macos, freebsd
SO_DEBUGposix, linux, windows, macos, freebsd, .net
SO_DONTROUTEposix, linux, windows, macos, freebsd, .net
TCP_INFO
<sub>via ioctl on Windows</sub>linux, windows, macos, freebsd, nginx, exim
IP_IPSEC_POLICYlinux, macos, freebsd
IP_MINTTLlinux, freebsd
IPV6_MINHOPCOUNTlinux
IP_MTUlinux, windows, openssl
IPV6_MTUlinux, windows, openssl
IPV6_PATHMTUlinux, macos, freebsd
IPV6_RECVPATHMTUlinux, macos, freebsd
IPV6_USE_MIN_MTUlinux, macos, freebsd
IP_OPTIONSlinux, windows, macos, freebsd, .net, exim
IP_RECVOPTSlinux, macos, freebsd
IP_RECVORIGDSTADDR
<sub>IP_ORIGDSTADDR on FreeBSD</sub>linux, freebsd
IP_RECVRETOPTS
<sub>Alias: IP_RETOPTS</sub>linux, macos, freebsd
IPV6_2292DSTOPTSlinux, macos, freebsd
IPV6_2292HOPLIMITlinux, macos, freebsd
IPV6_2292HOPOPTSlinux, macos, freebsd
IPV6_2292PKTINFOlinux, macos, freebsd
IPV6_2292PKTOPTIONSlinux, macos, freebsd
IPV6_2292RTHDRlinux, macos, freebsd
IPV6_AUTOFLOWLABELlinux, macos, freebsd
IPV6_CHECKSUMlinux, macos, freebsd
IPV6_DSTOPTSlinux, macos, freebsd
IPV6_HOPOPTSlinux, macos, freebsd
IPV6_IPSEC_POLICYlinux, macos, freebsd
IPV6_NEXTHOPlinux, macos, freebsd
IPV6_RECVDSTOPTSlinux, macos, freebsd
IPV6_RECVHOPOPTSlinux, macos, freebsd
IPV6_RECVORIGDSTADDR
<sub>IPV6_ORIGDSTADDR on FreeBSD</sub>linux, freebsd
IPV6_RECVRTHDRlinux, macos, freebsd
IPV6_RTHDRlinux, macos, freebsd
IPV6_RTHDRDSTOPTSlinux, macos, freebsd
SO_TIMESTAMPlinux, macos, freebsd
TCP_CONGESTIONlinux, freebsd
TCP_MAXSEGlinux, macos, freebsd
TCP_MD5SIGlinux, freebsd
TCP_NOTSENT_LOWATlinux, macos
UDP_ENCAPlinux, freebsd
IP_CHECKSUMlinux
IP_NODEFRAGlinux
IP_PASSSEClinux
IP_PKTOPTIONSlinux
IP_RECVERRlinux, libuv
IP_RECVERR_RFC4884linux
IP_RECVFRAGSIZElinux
IP_ROUTER_ALERTlinux
IP_XFRM_POLICYlinux
IPV6_ADDR_PREFERENCESlinux
IPV6_ADDRFORMlinux
IPV6_AUTHHDRlinux
IPV6_FLOWINFOlinux
IPV6_FLOWINFO_SENDlinux
IPV6_FLOWLABEL_MGRlinux
IPV6_JOIN_ANYCASTlinux
IPV6_LEAVE_ANYCASTlinux
IPV6_RECVERRlinux, libuv
IPV6_RECVERR_RFC4884linux
IPV6_RECVFRAGSIZElinux
IPV6_ROUTER_ALERTlinux
IPV6_ROUTER_ALERT_ISOLATElinux
IPV6_XFRM_POLICYlinux
SO_ATTACH_FILTERlinux
SO_BPF_EXTENSIONSlinux
SO_BSDCOMPATlinux
SO_BUF_LOCKlinux
SO_BUSY_POLLlinux
SO_BUSY_POLL_BUDGETlinux
SO_CNX_ADVICElinux
SO_COOKIElinux, nginx
SO_DETACH_FILTERlinux
SO_LOCK_FILTERlinux
SO_MARKlinux
SO_MEMINFOlinux
SO_NETNS_COOKIElinux
SO_NO_CHECKlinux
SO_NOFCSlinux
SO_PASSCREDlinux
SO_PASSSEClinux
SO_PEEK_OFFlinux
SO_PEERNAMElinux
SO_PREFER_BUSY_POLLlinux
SO_PRIORITYlinux
SO_RCVBUFFORCElinux
SO_RCVMARKlinux
SO_RESERVE_MEMlinux
SO_RXQ_OVFLlinux
SO_SELECT_ERR_QUEUElinux
SO_SNDBUFFORCElinux
SO_TIMESTAMPINGlinux
SO_TIMESTAMPNSlinux
SO_TXREHASHlinux
SO_TXTIMElinux
SO_WIFI_STATUSlinux
SO_ZEROCOPYlinux
TCP_CC_INFOlinux
TCP_CM_INQlinux
TCP_DEFER_ACCEPTlinux, nginx
TCP_INQlinux
TCP_LINGER2linux
TCP_MD5SIG_EXTlinux
TCP_QUEUE_SEQlinux
TCP_QUICKACKlinux, jvm, exim
TCP_REPAIRlinux
TCP_REPAIR_OPTIONSlinux
TCP_REPAIR_QUEUElinux
TCP_REPAIR_WINDOWlinux
TCP_SAVE_SYNlinux
TCP_SAVED_SYNlinux
TCP_SYNCNTlinux
TCP_THIN_DUPACKlinux
TCP_THIN_LINEAR_TIMEOUTSlinux
TCP_TIMESTAMPlinux
TCP_TX_DELAYlinux
TCP_ULPlinux
TCP_USER_TIMEOUTlinux
TCP_WINDOW_CLAMPlinux
TCP_ZEROCOPY_RECEIVElinux
UDP_CORKlinux
UDP_GROlinux, msquic
UDP_NO_CHECK6_RXlinux
UDP_NO_CHECK6_TXlinux
UDP_SEGMENTlinux, nginx
IP_ADD_IFLISTwindows
IP_DEL_IFLISTwindows
IP_GET_IFLISTwindows
IP_IFLISTwindows
IP_ORIGINAL_ARRIVAL_IFwindows
IP_ORIGINAL_ARRIVAL_IFwindows
IP_RECEIVE_BROADCASTwindows
IP_USER_MTUwindows
IP_WFP_REDIRECT_CONTEXTwindows
IP_WFP_REDIRECT_RECORDSwindows
IPV6_ADD_IFLISTwindows
IPV6_DEL_IFLISTwindows
IPV6_GET_IFLISTwindows
IPV6_IFLISTwindows
IPV6_PROTECTION_LEVELwindows
IPV6_RECVIFwindows
IPV6_USER_MTUwindows
SO_BSP_STATEwindows
SO_CONDITIONAL_ACCEPTwindows
SO_CONNDATAwindows
SO_CONNDATALENwindows
SO_CONNECT_TIMEwindows
SO_CONNOPTwindows
SO_CONNOPTLENwindows
SO_DISCDATAwindows
SO_DISCDATALENwindows
SO_DISCOPTwindows
SO_DISCOPTLENwindows
SO_GROUP_IDwindows
SO_GROUP_PRIORITYwindows
SO_MAX_MSG_SIZEwindows
SO_MAXDGwindows
SO_MAXPATHDGwindows
SO_OPENTYPEwindows
SO_PAUSE_ACCEPTwindows
SO_PROTOCOL_INFOwindows
SO_PROTOCOL_INFOAwindows
SO_PROTOCOL_INFOWwindows
SO_UPDATE_ACCEPT_CONTEXTwindows
SO_UPDATE_CONNECT_CONTEXTwindows
TCP_BSDURGENTwindows
TCP_EXPEDITED_1122windows
TCP_FAIL_CONNECT_ON_ICMP_ERRORwindows
TCP_ICMP_ERROR_INFOwindows
TCP_MAXRTwindows
TCP_TIMESTAMPSwindows
UDP_CHECKSUM_COVERAGEwindows
UDP_NOCHECKSUMwindows
UDP_RECV_MAX_COALESCED_SIZEwindows, msquic
UDP_SEND_MSG_SIZEwindows, msquic
IP_FAITHmacos
IP_NAT__XXXmacos
IP_STRIPHDRmacos
IP_TRAFFIC_MGT_BACKGROUNDmacos
IPV6_3542DSTOPTSmacos
IPV6_3542HOPLIMITmacos
IPV6_3542HOPOPTSmacos
IPV6_3542NEXTHOPmacos
IPV6_3542PKTINFOmacos
IPV6_3542RTHDRmacos
IPV6_RTHDR_LOOSEmacos
IPV6_RTHDR_STRICTmacos
IPV6_RTHDR_TYPE_0macos
SO_AWDL_UNRESTRICTEDmacos
SO_CFIL_SOCK_IDmacos
SO_DELEGATEDmacos
SO_DELEGATED_UUIDmacos
SO_DONTTRUNCmacos
SO_EXECPATHmacos
SO_EXTENDED_BK_IDLEmacos
SO_FLOW_DIVERT_TOKENmacos
SO_FLUSHmacos
SO_INTCOPROC_ALLOWmacos
SO_LINGER_SECmacos
SO_MARK_CELLFALLBACKmacos
SO_MPKL_SEND_INFOmacos
SO_NECP_ATTRIBUTESmacos
SO_NECP_CLIENTUUIDmacos
SO_NECP_LISTENUUIDmacos
SO_NET_SERVICE_TYPEmacos
SO_NETSVC_MARKING_LEVELmacos
SO_NKEmacos
SO_NOADDRERRmacos
SO_NOAPNFALLBKmacos
SO_NOTIFYCONFLICTmacos
SO_NOWAKEFROMSLEEPmacos
SO_NP_EXTENSIONSmacos
SO_NREADmacos
SO_NUMRCVPKTmacos
SO_NWRITEmacos
SO_OPPORTUNISTICmacos
SO_QOSMARKING_POLICY_OVERRIDEmacos
SO_RECV_ANYIFmacos
SO_RESTRICTIONSmacos
SO_REUSESHAREUIDmacos
SO_STATISTICS_EVENTmacos
SO_TC_NET_SERVICE_OFFSETmacos
SO_TC_NETSVC_SIGmacos
SO_TIMESTAMP_CONTINUOUSmacos
SO_TIMESTAMP_MONOTONICmacos
SO_TRAFFIC_MGT_BACKGROUNDmacos
SO_UPCALLCLOSEWAITmacos
SO_WANT_KEV_SOCKET_CLOSEDmacos
SO_WANTMOREmacos
SO_WANTOOBFLAGmacos
MPTCP_ALTERNATE_PORTmacos
MPTCP_EXPECTED_PROGRESS_TARGETmacos
MPTCP_FORCE_ENABLEmacos
MPTCP_FORCE_VERSIONmacos
MPTCP_SERVICE_TYPEmacos
PERSIST_TIMEOUTmacos
TCP_ADAPTIVE_READ_TIMEOUTmacos
TCP_ADAPTIVE_WRITE_TIMEOUTmacos
TCP_CONNECTION_INFOmacos
TCP_CONNECTIONTIMEOUTmacos
TCP_DISABLE_BLACKHOLE_DETECTIONmacos
TCP_KEEPALIVE_OFFLOADmacos
TCP_MEASURE_BW_BURSTmacos
TCP_MEASURE_SND_BWmacos
TCP_NOTIFY_ACKNOWLEDGEMENTmacos
TCP_NOTIMEWAITmacos
TCP_PEER_PIDmacos
TCP_RXT_CONNDROPTIMEmacos
TCP_RXT_FINDROPmacos
TCP_RXT_MINIMUM_TIMEOUTmacos
TCP_SENDMOREACKSmacos
UDP_KEEPALIVE_OFFLOADmacos
UDP_NOCKSUMmacos
ICMP6_FILTERmacos, freebsd
IP_MULTICAST_VIFmacos, freebsd
IP_PORTRANGEmacos, freebsd, go
IP_RSVP_OFFmacos, freebsd
IP_RSVP_ONmacos, freebsd
IP_RSVP_VIF_OFFmacos, freebsd
IP_RSVP_VIF_ONmacos, freebsd
IPV6_2292NEXTHOPmacos, freebsd
IPV6_BINDV6ONLYmacos, freebsd
IPV6_FAITHmacos, freebsd
IPV6_PKTOPTIONSmacos, freebsd
IPV6_PORTRANGEmacos, freebsd, go
IPV6_PREFER_TEMPADDRmacos, freebsd
IPV6_RECVRTHDRDSTOPTSmacos, freebsd
SO_ACCEPTFILTERmacos, freebsd, nginx
SO_LABELmacos, freebsd
SO_PEERLABELmacos, freebsd
SO_USELOOPBACKmacos, freebsd
TCP_NOOPTmacos, freebsd
IP_BINDMULTIfreebsd
IP_FLOWIDfreebsd
IP_FLOWTYPEfreebsd
IP_MAX_MEMBERSHIPSfreebsd
IP_ONESBCASTfreebsd
IP_RECVFLOWIDfreebsd
IP_RECVRSSBUCKETIDfreebsd
IP_RSS_LISTEN_BUCKETfreebsd
IP_RSSBUCKETIDfreebsd
IP_SENDSRCADDRfreebsd, nginx
IP_VLAN_PCPfreebsd
IPV6_AUTH_LEVELfreebsd
IPV6_BINDMULTIfreebsd
IPV6_ESP_NETWORK_LEVELfreebsd
IPV6_ESP_TRANS_LEVELfreebsd
IPV6_FLOWIDfreebsd
IPV6_FLOWTYPEfreebsd
IPV6_IPCOMP_LEVELfreebsd
IPV6_RECVFLOWIDfreebsd
IPV6_RECVRSSBUCKETIDfreebsd
IPV6_RSS_LISTEN_BUCKETfreebsd
IPV6_RSSBUCKETIDfreebsd
IPV6_VLAN_PCPfreebsd
SO_BINTIMEfreebsd
SO_LISTENINCQLENfreebsd
SO_LISTENQLENfreebsd, exim
SO_LISTENQLIMITfreebsd
SO_MAX_PACING_RATEfreebsd
SO_NO_DDPfreebsd
SO_NO_OFFLOADfreebsd
SO_RERRORfreebsd
SO_SETFIBfreebsd, nginx
SO_TS_BINTIMEfreebsd
SO_TS_CLOCKfreebsd
SO_TS_CLOCK_MAXfreebsd
SO_TS_DEFAULTfreebsd
SO_TS_MONOTONICfreebsd
SO_TS_REALTIMEfreebsd
SO_TS_REALTIME_MICROfreebsd
SO_USER_COOKIEfreebsd
TCP_CCALGOOPTfreebsd
TCP_DEFER_OPTIONSfreebsd
TCP_DELACKfreebsd
TCP_FAST_RSM_HACKfreebsd
TCP_FIN_IS_RSTfreebsd
TCP_FUNCTION_ALIASfreebsd
TCP_FUNCTION_BLKfreebsd
TCP_HDWR_RATE_CAPfreebsd
TCP_HDWR_UP_ONLYfreebsd
TCP_IDLE_REDUCEfreebsd
TCP_IWND_NBfreebsd
TCP_IWND_NSEGfreebsd
TCP_KEEPINITfreebsd
TCP_LOGfreebsd
TCP_LOG_LIMITfreebsd
TCP_LOG_TAGfreebsd
TCP_LOGBUFfreebsd
TCP_LOGDUMPfreebsd
TCP_LOGDUMPIDfreebsd
TCP_LOGIDfreebsd
TCP_LOGID_CNTfreebsd
TCP_LRDfreebsd
TCP_MAXPEAKRATEfreebsd
TCP_MAXUNACKTIMEfreebsd
TCP_PCAP_INfreebsd
TCP_PCAP_OUTfreebsd
TCP_PERF_INFOfreebsd
TCP_PROC_ACCOUNTINGfreebsd
TCP_REMOTE_UDP_ENCAPS_PORTfreebsd
TCP_RXTLS_ENABLEfreebsd
TCP_RXTLS_MODEfreebsd
TCP_STATSfreebsd
TCP_TXTLS_ENABLEfreebsd
TCP_TXTLS_MODEfreebsd
TCP_USE_CMP_ACKSfreebsd
TCP_USER_LOGfreebsd