什么是套接字类型?

时间:2017-02-06 15:31:07

标签: c sockets

无论您使用winsock还是posix,您使用的函数来创建网络套接字都需要指定套接字的地址族,协议和“类型”。然而,似乎这个参数对程序员来说意义不大,也可以通过查看其他两个参数来确定。那么这里的交易是什么?有一些历史原因吗?就像维京人一样,使用这个参数来引诱英国人离开他们的城堡吗?

2 个答案:

答案 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参数中是没有意义的。