我可以使UDP berkley套接字只保留UDP单消息吗?这意味着当新消息到达时,如果存在未读消息,它将覆盖现有消息吗?
答案 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。