Python - sendto()的返回值是否无用?

时间:2014-03-10 05:23:15

标签: python udp sendto

在我最近的项目中,我需要使用UDP协议来传输数据。 如果我使用size = s.sendto(data, (<addr>, <port>))发送数据,UDP协议是否会确保将数据打包到一个UDP数据包中? 如果是,size == len(data)总是True吗? 有什么我误解了吗?

更确切地说,'sendto()'会将我的数据拆分成几个较小的块,然后将每个块打包成UDP数据包进行转换吗?

2 个答案:

答案 0 :(得分:1)

UDP数据包的长度有限。如果你的数据太大,返回值不能等于长度。还有一些情况,比如没有足够的发送缓冲区,网络故障。大小仅表示已发送到发送缓冲区的字节。

答案 1 :(得分:0)

最后,我从“UNIX网络编程”中得到了答案, 第2.11章缓冲区大小和限制,UDP输出部分。

  

Steps and buffers involved when an application writes to a UDP socket.

     

这一次,我们将套接字发送缓冲区显示为虚线框,因为它确实不存在。   UDP套接字具有发送缓冲区大小(我们可以使用SO_SNDBUF套接字更改)   选项,第7.5节),但这只是最大UDP的上限   数据报,可以写入套接字。如果应用程序写入的数据报大于   套接字发送缓冲区大小,返回EMSGSIZE。