我可以让 UDP b ​​套接字仅保存一条消息吗?

发布于 2024-08-25 15:05:05 字数 71 浏览 2 评论 0原文

我可以让 UDP Berkley 套接字仅保存一条 UDP 单个消息吗?这意味着如果新消息到达时存在未读消息,它将覆盖现有消息?

can I make a UDP berkley socket hold only a UDP single message ? meaning it will override existing message if unread message is present when a new message arrives ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

萧瑟寒风 2024-09-01 15:05:05

据我所知,唯一可以做到这一点的方法是在应用程序端处理它。我假设您有一个 UDP 套接字来获取某种实时数据,并且您只关心到达的最新/最近的数据包。如果是这种情况,您可以执行类似以下伪代码的操作:

struct foo {
   ...
}
int get_most_recent_packet(int sockfd, struct foo *foobuf) {
    ssize_t ret; int gotPacket = 0;
    while ((ret = recvfrom(sockfd, foobuf, sizeof(struct foo), 
                      MSG_DONTWAIT, NULL, NULL)) > 0) {
         gotPacket = 1;
    }
    if (gotPacket) return 1;
    return -1;
}

请参阅 的手册页接收来自

The only way you could do that would be to handle it on the application side, as far as I know. I assume you have a UDP socket getting some kind of real time data and that you only care about the latest / most recent packet of data to arrive. If that's the case you could do something like the following pseudo code:

struct foo {
   ...
}
int get_most_recent_packet(int sockfd, struct foo *foobuf) {
    ssize_t ret; int gotPacket = 0;
    while ((ret = recvfrom(sockfd, foobuf, sizeof(struct foo), 
                      MSG_DONTWAIT, NULL, NULL)) > 0) {
         gotPacket = 1;
    }
    if (gotPacket) return 1;
    return -1;
}

See the man page for recvfrom.

入画浅相思 2024-09-01 15:05:05

DNS 记录具有随机事务 ID,以便应用程序可以将结果与请求进行匹配。您可以尝试使用自己的交易 ID。

DNS records have a random transaction ID, so that the application can match the result to the request. You might try using your own transaction ID.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文