在我最近的项目中,我需要使用UDP协议来传输数据。
如果我使用size = s.sendto(data, (<addr>, <port>))
发送数据,UDP协议是否会确保将数据打包到一个UDP数据包中?
如果是,size == len(data)
总是True
吗?
有什么我误解了吗?
更确切地说,'sendto()'会将我的数据拆分成几个较小的块,然后将每个块打包成UDP数据包进行转换吗?
答案 0 :(得分:1)
UDP数据包的长度有限。如果你的数据太大,返回值不能等于长度。还有一些情况,比如没有足够的发送缓冲区,网络故障。大小仅表示已发送到发送缓冲区的字节。
答案 1 :(得分:0)
最后,我从“UNIX网络编程”中得到了答案, 第2.11章缓冲区大小和限制,UDP输出部分。
这一次,我们将套接字发送缓冲区显示为虚线框,因为它确实不存在。 UDP套接字具有发送缓冲区大小(我们可以使用SO_SNDBUF套接字更改) 选项,第7.5节),但这只是最大UDP的上限 数据报,可以写入套接字。如果应用程序写入的数据报大于 套接字发送缓冲区大小,返回EMSGSIZE。