我可以使UDP B套接字只保留一条消息吗?

时间:2010-03-17 09:33:26

标签: sockets udp

我可以使UDP berkley套接字只保留UDP单消息吗?这意味着当新消息到达时,如果存在未读消息,它将覆盖现有消息吗?

2 个答案:

答案 0 :(得分:2)

据我所知,你能做到的唯一方法是在应用程序端处理它。我假设您有一个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;
}

请参阅recvfrom的手册页。

答案 1 :(得分:0)

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