我正在使用一个必须能够使用UDP与传统计算机进行通信的嵌入式盒子 . 当该框发送大型UDP消息(需要分段)时,每个片段都包含一个UDP头 . 因此,如果我想发送一个大型数据报,它将被分段如下:
[eth hdr][ip hdr][udp hdr][ data 1 ] /* first fragment */
[eth hdr][ip hdr][udp hdr][ data 2 ] /* second fragment */
[eth hdr][ip hdr][udp hdr][ data 3 ] /* last fragment */
我知道这不是习惯,因为通常udp头只会包含在碎片消息的第一个ip数据包中 . 但是,这非常适合与我需要交谈的其他机器进行通信(例如使用recvfrom),所以我没有理由深入挖掘并试图改变它 .
然而,我的问题在于阅读信息 . 该框似乎期望以相同的方式将碎片化的udp数据报发送给它 . 我的意思是它希望每个ipv4片段都有一个udp头 . 在尝试更改它(它是一个相当专业和复杂的平台)之前,我想知道是否有任何方法可以配置sendto()或任何其他此类函数以此格式发送udp消息 . 我在监视流量时看到那些udp标头不存在 .
非常感谢你的帮助 .
1 回答
没有 . 套接字不能这样工作 . 只需编写自己的sendto包装器,即可在您选择的任何缓冲区大小边界上跨多个UDP数据包手动分段帧 . 这将达到您想要的效果 .
示例代码如下: