c - socket函数中的stream参数和protocol参数有什么区别?

标签 c sockets

int socket(int domain, int type, int protocol);

据我了解,

int domain;

该参数用于传递地址族或协议(protocol)族。我相信地址族和协议(protocol)族之间没有重大区别。我们使用它来指定地址类型(IPV4 或 IPv6)。

int type;

该参数用于网络层的UDP、TCP等连接类型。

int protocol;

该参数用于指定TCP、UDP等协议(protocol)。

我的问题是

第二个和第三个参数有什么区别?如果我们使用 TCP 协议(protocol),我们将使用 SOCK_STREAM ,如果我们使用 UDP 协议(protocol),我们将在第二个参数中使用 SOCK_DGRAM 。那么为什么在这种情况下需要两个参数呢?为什么我们不使用单个参数而不是两个?

最佳答案

根据手册页,协议(protocol)是套接字的子类型,对于大多数类型,没有子类型,但某些类型可能有其他子类型。

例如,如果你有原始套接字类型,你可以指定协议(protocol)号。

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

-MS

关于c - socket函数中的stream参数和protocol参数有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19971285/

相关文章:

c++ - 套接字数据的十六进制表示(char)c++

c - 结构中的函数指针,但在 C 中具有不同原型(prototype)的函数

java - Java中的原始套接字

c - 段错误C错误

c - 可变长度数组和动态内存分配有什么区别?

sockets - ZeroMQ 设计决策

java - 负载均衡器通过 TCP 并使用 TLS 协议(protocol)传递消息

java - tomcat 8 中的 web.xml 与 websocket

c - 用字符指针加载文件,C

c - 如何在 pthread 函数 usleep() 的 for 循环中使用随机种子生成器?