c - 在c中通过socket函数制作可靠的UDP

标签 c

我对套接字编程有这样的疑问,我无法通过阅读手册页来消除它。

在c中socket函数的声明是int socket(int domain, int type, int protocol);

Linux 手册页说,虽然类型决定了将遵循的流,但协议(protocol)号决定了所遵循的协议(protocol)。

所以我的问题是,假设我将类型参数指定为 SOCK_STREAM这是可靠的,添加 UDP 的协议(protocol)号,它会给我一个可靠的 UDP,它与 TCP 相同,但没有流量控制和拥塞控制。

不幸的是,我无法对此进行测试,因为我只有一台机器,因此不会发生丢包情况。

有人能解开这个疑惑吗?非常感谢...

最佳答案

UDP 无法变得可靠。数据包的传输是以“尽力而为”的能力完成的,但是链上的任何路由器/主机都可以随意将数据包丢弃到垃圾中,并且不会通知发送者它已经这样做了。

这并不是说您不能对发送端和接收端施加额外的语义,以期望在特定时间范围内收到数据包并说“嘿,我们在过去 X 秒内没有收到任何内容”。但这无法在协议(protocol)级别完成。 UDP 是一种“将其转储到发件箱并希望它到达那里”的协议(protocol)。

关于c - 在c中通过socket函数制作可靠的UDP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5205915/

相关文章:

c - 从不兼容的指针类型赋值——如何解决?

编译时的 C 数组对齐检查

c - 在c中读取一行并转换为字符串

c - 使用 C 程序去除背景和检测形状

c - 将指针作为参数传递时的通常结果

c - c中的命名管道

c - 尝试理解计数排序的复杂性

c - 反转数组[更新],文件扫描

c - 如何使用参数和数组查找 C 中最大和最小元素?

c - 添加矩阵/返回数组