gpt4 book ai didi

linux - Linux 上 UDP 套接字上的 send、sendto 和 sendmsg 的可能返回值是什么?

转载 作者:行者123 更新时间:2023-12-03 09:57:50 25 4
gpt4 key购买 nike

这些函数在错误时返回 -1,在成功时返回输入长度。在什么情况下,对于 Linux 上的 UDP 套接字,它们可能返回小于长度且大于或等于 0 的值?
This StackOverflow question类似,但在非 Linux RTOS 的上下文中。答案断言它不可能发生,并且操作系统供应商与他们相矛盾。 This StackOverflow question类似,但接受的答案仅讨论收据。 Beej's guide断言它可能会发生。 libuv断言它不能。 POSIX 似乎并没有禁止它。
因此,我很好奇什么情况下(如果有的话)会导致 Linux 上 UDP 套接字的“短写”返回值? POSIX 中是否有禁止它的互联网 RFC 或条款?例如,如果 UDP 数据报被分段(在多个 IP 数据包中发送),这种情况会发生吗?

最佳答案

UDP 是一种数据报协议(protocol),即它不像 TCP 那样是字节流,但协议(protocol)内部有明确的消息边界。这些消息语义在阅读时会反射(reflect)出来,即单个 recv将返回单个(和完整)消息。
使用单个 send 发送单个消息(数据报)并且没有其他方法可以指定消息边界。但是“短发送”会在它们不属于的地方引入消息边界,因此对于 UDP 是不可能的。

关于linux - Linux 上 UDP 套接字上的 send、sendto 和 sendmsg 的可能返回值是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63201565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com