首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只接受套接字的最后一个UDP数据包。

只接受套接字的最后一个UDP数据包。
EN

Stack Overflow用户
提问于 2022-06-15 03:11:19
回答 1查看 65关注 0票数 1

我在为无人机编写udp服务器。无人机定期发送有关其传感器数据的数据包。我想知道是否有一个函数或一个优雅的解决方案,可以将最后一个包送到并丢弃前面的包。现在,使用MSG_DONTWAIT标志调用recv()是我唯一能想到的事情,直到出现EAGAIN/EWOULDBLOCK错误。这看起来既慢又浪费。

EN

回答 1

Stack Overflow用户

发布于 2022-06-15 04:12:29

我很确定操作系统没有一个函数来处理所有排队的数据包,但是最后一个包。这不是一个人通常做的事情

你描述的方法是非常好的。也不像你说的那样浪费。

什么可能是浪费是你如何等待一个包裹到达时,没有收到。您应该为此使用select/poll/epoll,而不是使用您描述的循环,只使用一次通知数据包正在等待的循环。

同样浪费的是您在检查新数据包之间所做的工作。当你花费更多的时间处理数据包而不是无人机的推送周期时,你担心的是CPU功率的微秒或纳秒?如果您需要优化,这就是您应该开始的地方。

请注意,您不希望保留recv返回的最后一个数据包,但是具有最新时间戳或序列号的数据包(如果协议提供这些信息)。UDP并不保证按发送的顺序接收数据包。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72625522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档