Wei*_*Shi 3 c serialization udp
我正在通过UDP发送C结构
struct packet{
int numInt;
int* intList; //malloc'ed as (sizeof(int)*numInt)
}
Run Code Online (Sandbox Code Playgroud)
它将序列化为[numInt][intList[0]]...[intList[numInt-1]]。
我的理解是recvfrom,即使缓冲区不包含那么多字节,调用UDP也会读取整个数据包。使用唯一的大缓冲区是我唯一的选择吗?
你可以传递MSG_PEEK到recvfrom找出究竟缓冲多大需要是。因此,仅需查找recvfrom几个字节,然后再MSG_PEEK查找真实的对象(这次没有)。numIntrecvfromMSG_PEEK
该标准说了一些有关的内容MSG_PEEK,但kernel.org的拼写更好:
MSG_PEEK此标志使接收操作从接收队列的开头返回数据,而不会从队列中删除该数据。因此,后续的接收呼叫将返回相同的数据。
显然,在某个时候,您会开始怀疑,将系统调用数量增加一倍以节省内存是否值得。我认为不是。