int socket(int domain, int type, int protocol);
据我了解,
int domain;
此参数用于传递地址系列或协议族。我相信地址族和协议族之间没有重大区别。我们使用它来指定地址类型(IPV4或IPv6)。
int type;
此参数用于网络层中的UDP,TCP等连接类型。
int protocol;
此参数用于指定协议,如TCP,UDP。
我的问题是
第二个和第三个参数有什么区别?如果我们使用TCP协议,我们将使用SOCK_STREAM
,如果我们使用UDP协议,我们将在第二个参数中使用SOCK_DGRAM
。那么为什么在这种情况下需要两个参数呢?为什么我们不使用单个参数而不是两个?
答案 0 :(得分:1)
根据手册页,协议是套接字的子类型,对于大多数类型,没有子类型,但某些类型可能有其他子类型。
例如,如果您具有类型原始套接字,则可以指定协议编号。
int fd = socket (PF_INET, SOCK_RAW, IPPROTO_TCP);
-MS