【发布时间】:2012-10-28 13:10:06
【问题描述】:
当使用原始 TCP 套接字时,需要进行消息成帧,正如 here 所解释的那样,使用长度前缀或分隔符。
我今天遇到了“SOCK_SEQPACKET”套接字选项,它显然可以几乎透明地进行消息框架。
目前在平台和操作系统中“SOCK_SEQPACKET”的可用性如何? (Windows、OSX、Linux、IOS、Android...)
【问题讨论】:
标签: sockets networking tcp ip
当使用原始 TCP 套接字时,需要进行消息成帧,正如 here 所解释的那样,使用长度前缀或分隔符。
我今天遇到了“SOCK_SEQPACKET”套接字选项,它显然可以几乎透明地进行消息框架。
目前在平台和操作系统中“SOCK_SEQPACKET”的可用性如何? (Windows、OSX、Linux、IOS、Android...)
【问题讨论】:
标签: sockets networking tcp ip
我你使用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 一起使用。
【讨论】:
【讨论】: