在recvfrom()之前获取udp中的消息长度

在recvfrom()之前获取udp中的消息长度,udp,message,Udp,Message,我正在用C为linux编写一个应用程序,它将接收数千条大小可变的UDP消息。在使用recvfrom()syscall将消息读入缓冲区之前,我必须先获得消息大小。我不能为最大可能的消息分配内存,因为因为我使用9000的MTU并获得数千条消息,大量内存将被浪费。 我登录了谷歌,通过getsockopt syscall的SO\u NREAD选项可以找到消息的大小,但是这只适用于BSD。我知道消息位于Linux内核中的某个位置,因为我的套接字在非阻塞模式下工作,并且内核事件通知我数据可用,因此,消息必须

我正在用C为linux编写一个应用程序,它将接收数千条大小可变的UDP消息。在使用recvfrom()syscall将消息读入缓冲区之前,我必须先获得消息大小。我不能为最大可能的消息分配内存,因为因为我使用9000的MTU并获得数千条消息,大量内存将被浪费。 我登录了谷歌,通过getsockopt syscall的SO\u NREAD选项可以找到消息的大小,但是这只适用于BSD。我知道消息位于Linux内核中的某个位置,因为我的套接字在非阻塞模式下工作,并且内核事件通知我数据可用,因此,消息必须存储在某个位置,但是我如何获取它

提前感谢

您可能希望与
FIONREAD一起使用。它可用于
Linux
BSD

FIONREAD int获取可立即读取的字节数

if(ioctl(s, FIONREAD, &bytes) != -1)
    printf("%d bytes available", bytes);
您可能希望与
FIONREAD
一起使用。它可用于
Linux
BSD

FIONREAD int获取可立即读取的字节数

if(ioctl(s, FIONREAD, &bytes) != -1)
    printf("%d bytes available", bytes);