使用原始 TCP 套接字时,需要使用长度前缀或分隔符进行消息框架,如此处所述。
我今天遇到了“SOCK_SEQPACKET”套接字选项,它显然可以几乎透明地执行消息框架。
目前在平台和操作系统中“SOCK_SEQPACKET”的可用性如何?(Windows、OSX、Linux、IOS、安卓...)
使用原始 TCP 套接字时,需要使用长度前缀或分隔符进行消息框架,如此处所述。
我今天遇到了“SOCK_SEQPACKET”套接字选项,它显然可以几乎透明地执行消息框架。
目前在平台和操作系统中“SOCK_SEQPACKET”的可用性如何?(Windows、OSX、Linux、IOS、安卓...)
我你使用SOCK_SEQPACKET
的AF_INET
,这样:
socket(AF_INET, SOCK_SEQPACKET, 0);
你不会得到 TCP 套接字。如果您的平台支持,该套接字将是一个 SCTP 套接字。
SCTP 尚未广泛使用。最新的 Linux 版本支持它(如果启用了 SCTP)。
SCTP 在 Mac OS X (El Captain) 上仍然不可用。在https://github.com/sctplab/SCTP_NKE_ElCapitan有一个第 3 方开源内核扩展- 但它没有签名,因此您必须禁用 Apple 系统完整性保护。
参见例如https://apple.stackexchange.com/questions/114217/sctp-kernel-extension-for-mavericks
同样,您也不能在 Mac OS X 上将 SOCK_SEQPACKET 与 AF_UNIX 一起使用。