我对sendto有一个基本问题:
假设我们希望目标接收到一个精确X字节的UDP数据包。这意味着,它不能接收少于X个字节的数据包(如果sendto返回少于X个字节,则有可能)。是否可以强制发送方发送X个字节,或者如果不可能的话甚至返回错误? (即,接收器要么将获得X字节的数据包,要么将不会获得该数据包)。
编辑: 如果发送的字节数始终为X,那么为什么返回值(发送的字节数)可能小于发送的数据的字节数(如 https://docs.microsoft.com/en-us/windows/win32/api/winsock/nf-winsock-sendto )并且是非负数?
答案 0 :(得分:3)
这意味着它不能接收少于X个字节的数据包(如果sendto返回少于X个字节,则有可能)。
这永远不会在UDP套接字上发生。来自the send(2)
manual page:
如果消息太长而无法自动通过基础协议传递,则返回错误
EMSGSIZE
,并且消息不会传输。
简而言之,默认情况下,您所要求的行为已经存在。