当前位置:  开发笔记 > 程序员 > 正文

如何在C中读取长度可变的UDP数据包

如何解决《如何在C中读取长度可变的UDP数据包》经验,为你挑选了1个好方法。

我正在通过UDP发送C结构

struct packet{
    int numInt;
    int* intList; //malloc'ed as (sizeof(int)*numInt)
}

它将序列化为[numInt][intList[0]]...[intList[numInt-1]]

我的理解是recvfrom,即使缓冲区不包含那么多字节,调用UDP也会读取整个数据包。使用唯一的大缓冲区是我唯一的选择吗?



1> cnicutar..:

你可以传递MSG_PEEKrecvfrom找出究竟缓冲多大需要是。因此,仅需查找recvfrom几个字节,然后再MSG_PEEK查找真实的对象(这次没有)。numIntrecvfromMSG_PEEK

该标准说了一些有关的内容MSG_PEEK,但kernel.org的拼写更好:

MSG_PEEK

此标志使接收操作从接收队列的开头返回数据,而不会从队列中删除该数据。因此,后续的接收呼叫将返回相同的数据。

显然,在某个时候,您会开始怀疑,将系统调用数量增加一倍以节省内存是否值得。我认为不是。

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有