Udp Recvfrom()返回值

Udp Recvfrom()返回值,udp,mtu,Udp,Mtu,我正在使用UDP数据包,我想澄清一些问题: 1.“recvfrom”具体返回什么?我的意思是,如果我发送一个大小为450字节+20字节IP头+8字节UDP头的数据包,recvfrom会返回478字节作为一个整体,或者可能会有类似这样的结果: 它接收到10字节、300字节、100字节、68字节? 2.“recvfrom”的返回值是否与数据包碎片有关 注: *我在谈论“recvfrom”成功的假设 *我选择450字节以确保Im小于最小MTU 对于UDP套接字,recvfrom()读取UDP数据。所以

我正在使用UDP数据包,我想澄清一些问题:
1.“recvfrom”具体返回什么?我的意思是,如果我发送一个大小为450字节+20字节IP头+8字节UDP头的数据包,recvfrom会返回478字节作为一个整体,或者可能会有类似这样的结果:
它接收到10字节、300字节、100字节、68字节?
2.“recvfrom”的返回值是否与数据包碎片有关

注:
*我在谈论“recvfrom”成功的假设
*我选择450字节以确保Im小于最小MTU

  • 对于UDP套接字,recvfrom()读取UDP数据。所以它返回450,前提是您提供的缓冲区至少有450字节大。 如果您提供的缓冲区小于接收到的数据,则数据将被截断,并且recvfrom()将读取您提供的缓冲区中所能读取的数据

  • IP层将是对UDP数据包进行分段的部分,它将在接收主机上重新组装该数据包。这对发送/接收应用程序是透明的


  • 假设我提供了足够大的缓冲区,唯一可能的返回值是450,对吗?是的,或者如果发生错误,返回-1。由于它是UDP,您可能根本不会收到数据包,但非常感谢,这一直困扰着我,因为我需要使用UDP数据包实现类似tcp的功能