1
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_DGRAMin 2nd 参数。那么为什么在这种情况下需要两个参数呢?为什么我们不使用单个参数而不是两个?

4

1 回答 1

1

根据手册页,协议是套接字的子类型,对于大多数类型来说,没有子类型,但有些类型可能有额外的子类型。

例如,如果您有原始套接字类型,则可以指定协议号。

int fd = socket (PF_INET, SOCK_RAW, IPPROTO_TCP);

-多发性硬化症

于 2013-11-14T07:06:57.897 回答