首页 > 解决方案 > 零通常适合协议吗?

问题描述

我一直在阅读有关使用套接字的 GNU、libc 手册。根据此处的文档

文档中的确切措辞是,

零通常适用于协议。

我见过几个代码示例,其中工程师在实现套接字时将协议设置为 0,而不管使用的协议如何!

 int socket (int namespace, int style, int protocol)

请问一下,作者上面的说法是什么意思?我可以感觉到根据作者的陈述,在某些情况下 0 可能不是正确答案,如果是这样,有人可以详细说明这种情况吗?最重要的是,我们从哪里获得协议的价值?协议编号是否有任何标准可供参考?

标签: cgnu

解决方案


的有效值protocol取决于namespace使用的和程序运行的内核。

我假设,因为问题被标记gnu,你在 linux 下运行。然后,您可以找到有效名称空间的列表,以及指向这些名称空间文档的链接man 'socket(2)'。例如,您可能会在 Internet 名称空间AM_INETAM_INET6下方找到文档,man 'ip(7)'并且man 'ipv6(7)'

阅读ip(7)手册页,您可能会看到AM_INET支持协议IPPROTO_TCPIPPROTO_SCTP流套接字,以及IPPROTO_UDP数据IPPROTO_UDPLITE报套接字。

如果您想进一步挖掘,不同的协议也有自己的联机帮助页


推荐阅读