2017-02-06 35 views
0

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

+0

“套接字”有很多种类型,不仅是TCP或UDP套接字。其中的一些使用'socket'调用的第三个参数。 –

+0

@Someprogrammerdude请给出一个与多种袜子类型一起使用的各种协议的例子,并指出其差异? – Pyjong

回答

3

对于udplite协议,例如,插座被创建这样的:

sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDPLITE); 

SCTP插口:

sctp_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_SCTP); 
sctp_socket = socket(PF_INET, SOCK_SEQPACKET, IPPROTO_SCTP); 

换句话说,第三个参数来socket呼叫是不总是从前两个派生而来。

+0

O-kay ..有没有其他的值可以用在这个例子中? – Pyjong

+0

@Pyjong为你增加了更多的例子。 –

+0

谢谢你,很好的例子。我需要看到这一点。 – Pyjong

1

我倾向于同意你的说法type主要是多余的(虽然我没有经过full list of internet protocols看,我可能会丢失一些特殊情况),但有一个重要的情况:原始套接字(SOCK_RAW)。那些实际上没有与它们相关的协议,所以将这些信息放在参数中是没有意义的。

+0

谢谢,SOCK_RAW绝对值得研究。但我认为你可以忘记协议列表。只有少数选定的可用。这里有一个有趣的段落http://man7.org/linux/man-pages/man2/socket.2.html ctrl + f“协议指定”如果你有兴趣,当然。 – Pyjong

+0

好吧,出来错了。我应该说“只有少数可用作这个特定功能的参数”。谢谢你让我走上了正确的道路。 – Pyjong