无论您使用winsock还是posix,您使用的函数来创建网络套接字都需要指定套接字的地址族,协议和“类型”。然而,似乎这个参数对程序员来说意义不大,也可以通过查看其他两个参数来确定。那么这里的交易是什么?有一些历史原因吗?就像维京人一样,使用这个参数来引诱英国人离开他们的城堡吗?
答案 0 :(得分:3)
例如,对于udplite协议,套接字的创建方式如下:
[Bool]
SCTP套接字:
sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDPLITE);
换句话说,sctp_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_SCTP);
sctp_socket = socket(PF_INET, SOCK_SEQPACKET, IPPROTO_SCTP);
调用的第三个参数并不总是来自前两个。
答案 1 :(得分:1)
我倾向于同意你的观点,type
论证多数是多余的(虽然我没有查看full list of internet protocols,但我可能会遗漏一些特殊情况),除了一个重要案例:原始套接字(SOCK_RAW
)。那些实际上并没有与它们相关的协议,因此将这些信息放在protocol
参数中是没有意义的。