我正在处理C中的套接字,这个协议继续出现,我找不到任何关于它的东西,那么它是用来做什么的呢?HOPOPT和IP有什么区别?
另外,我不明白为什么套接字()函数的最后一个参数应该是0。根据手册页:
该协议指定要与套接字一起使用的特定协议。通常只存在单个协议来支持给定协议族中的特定套接字类型,在这种情况下,协议可以指定为0。但是,可能存在许多协议,在这种情况下,必须以这种方式指定特定的协议。要使用的协议号特定于进行通信的“通信域”;参见协议(5)。有关如何将协议名称字符串映射到协议编号的方法,请参见getprotoent(3)。
据我所知,将最后一个参数设置为0将让标准库决定使用哪个协议,但在这种情况下,其中一个将使用0以外的数字?
发布于 2018-02-28 13:49:39
HOPOPT是逐跳IPv6扩展头的缩写。它是一个允许向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
),那么它是可以的。https://stackoverflow.com/questions/46804125
复制相似问题