使用原始TCP套接字時,需要進行消息成幀,如here所述,要麼使用長度前綴,要麼使用分隔符。SOCK_SEQPACKET可用性?
今天我來到了「SOCK_SEQPACKET」套接字選項,它顯然可以幾乎透明地構建消息幀。
目前平臺和操作系統中「SOCK_SEQPACKET」的可用性如何? (在Windows,OSX,Linux和IOS,Android的...)
使用原始TCP套接字時,需要進行消息成幀,如here所述,要麼使用長度前綴,要麼使用分隔符。SOCK_SEQPACKET可用性?
今天我來到了「SOCK_SEQPACKET」套接字選項,它顯然可以幾乎透明地構建消息幀。
目前平臺和操作系統中「SOCK_SEQPACKET」的可用性如何? (在Windows,OSX,Linux和IOS,Android的...)
我你使用的AF_INET
SOCK_SEQPACKET
,這種方式:
socket(AF_INET, SOCK_SEQPACKET, 0);
你不會得到一個TCP套接字。如果你的平臺支持它,套接字將是一個SCTP套接字。
SCTP尚未廣泛使用。最新的Linux版本支持它(如果啓用了SCTP)。
SCTP在Mac OS X(El Captain)上仍然不可用。 在https://github.com/sctplab/SCTP_NKE_ElCapitan有第三方開源內核擴展 - 但它是未簽名的,因此您必須禁用Apple系統完整性保護。
參見例如https://apple.stackexchange.com/questions/114217/sctp-kernel-extension-for-mavericks
同樣的,你不能在Mac OS X AF_UNIX使用SOCK_SEQPACKET了。
謝謝!我認爲有可能獲得SOCK_SEQPACKET的TCP套接字... – plang