我正在搞乱C中的套接字并且这个协议继续出现,我找不到任何关于它的东西,那么它用于什么? HOPOPT和IP有什么区别?
另外我不明白为什么socket()函数的最后一个参数应为0.根据手册页:
协议指定要与套接字一起使用的特定协议。通常,只有一个协议支持给定协议族中的特定套接字类型,在这种情况下协议可以指定为0.但是,可能存在许多协议,在这种情况下,必须在此指定特定协议方式。要使用的协议号特定于进行通信的“通信域”;见协议(5)。请参阅getprotoent(3),了解如何将协议名称字符串映射到协议号。
据我所知,将最后一个参数设置为0会让标准库决定使用哪个协议,但在哪种情况下会使用0以外的数字?
答案 0 :(得分:1)
HOPOPT是Hop-by-Hop IPv6 extension header的首字母缩写。它是一个标头,允许向IPv6数据包添加更多选项。 IPv6数据包包含此标头是正常的。
socket()
是BSD和其他人(Linux等人)提供的系统调用,用于创建新的套接字,即网络连接的内部表示。创建新套接字时,必须指定所需的协议:TCP,UDP等,可以通过IPv4,IPv6等。
您引用的段落解释了每种套接字类型可能存在一个或多个协议。
如果只存在一个,protocol
参数必须为零。例如,SOCK_STREAM
套接字仅由TCP实现:
int sk = socket(AF_INET, SOCK_STREAM, 0);
如果存在更多,则必须指定要使用的特定协议。例如,SOCK_SEQPACKET
类型可以使用SCTP协议实现:
int sk = socket(AF_INET, SOCK_SEQPACKET, IPPROTO_SCTP);
所以,最后:
AF_INET6
),就可以了。