C语言中接收分段UDP数据包的问题

C语言中接收分段UDP数据包的问题,c,udp,C,Udp,我使用两个不同的C程序来接收碎片数据包,一个使用原始套接字,定义如下: _socket0 = socket( PF_PACKET, SOCK_RAW, htons(ETH_P_ALL) ); _socket0=socket(AF_INET, SOCK_DGRAM, 0); 一个使用UDP套接字,定义如下: _socket0 = socket( PF_PACKET, SOCK_RAW, htons(ETH_P_ALL) ); _socket0=socket(AF_INET, SOCK_DGR

我使用两个不同的C程序来接收碎片数据包,一个使用原始套接字,定义如下:

_socket0 = socket( PF_PACKET, SOCK_RAW, htons(ETH_P_ALL) );
_socket0=socket(AF_INET, SOCK_DGRAM, 0);
一个使用UDP套接字,定义如下:

_socket0 = socket( PF_PACKET, SOCK_RAW, htons(ETH_P_ALL) );
_socket0=socket(AF_INET, SOCK_DGRAM, 0);
第一个没问题,第二个没问题,我什么都看不见。
任何人都可以告诉我原因吗?

UDP数据包的片段不是UDP数据包,因此它不会被传递到UDP套接字。UDP套接字用于读取/写入整个UDP数据包,而不是携带一个数据包片段的IP数据包。

这一点很清楚,但据我所知,当PC在将数据包发送到新层(UDP层)之前接收到碎片数据包时,它会重新组合这些数据包片段以获得单个更大的数据包。所以问题可能是为什么PC没有重新组合数据包。事实上,首先我不明白为什么我不能同时接收单个UDP数据包,这可能是最初的问题