Linux 参数协议在socket()系统调用中代表什么?

Linux 参数协议在socket()系统调用中代表什么?,linux,sockets,tcp,udp,Linux,Sockets,Tcp,Udp,该协议指定要与一起使用的特定协议 插座通常只存在一个协议来支持特定的 给定协议族中的套接字类型,在这种情况下,协议可以 不能指定为0。然而,可能会有许多协议 存在,在这种情况下,必须在此文件中指定特定协议 态度。要使用的协议编号特定于“通信” 进行通信的“域” 字段描述如下: 协议协议的本机名称。例如ip、tcp或 udp 当我们已经指定第二个参数sock dgram或sock stream时,为什么还要使用协议参数 存在或可能存在许多不同的数据报或流协议。 对于流协议,AF_INET和AF_

该协议指定要与一起使用的特定协议 插座通常只存在一个协议来支持特定的 给定协议族中的套接字类型,在这种情况下,协议可以 不能指定为0。然而,可能会有许多协议 存在,在这种情况下,必须在此文件中指定特定协议 态度。要使用的协议编号特定于“通信” 进行通信的“域”

字段描述如下:

协议协议的本机名称。例如ip、tcp或 udp


当我们已经指定第二个参数sock dgram或sock stream时,为什么还要使用协议参数

存在或可能存在许多不同的数据报或流协议。 对于流协议,AF_INET和AF_INET6域(当传递0时)的典型默认值为TCP,而对于数据报协议,则为UDP

另一个有趣的协议是,它可以在数据报和流模式下运行,因此您可以通过以下任一方式创建SCTP套接字:

socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP);
socket(AF_INET, SOCK_DGRAM, IPPROTO_SCTP);
可以使用创建变量

socket(AF_INET, SOCK_DGRAM, IPPROTO_UDPLITE);
还要注意,socket()是一个通用调用,可用于创建非基于IP的套接字,例如,用于蓝牙、红外、can总线协议,这些协议可能提供您可以使用的不同协议