можно сделать, чтобы UDP-сокет удерживал только одно сообщение? - PullRequest
2 голосов
/ 17 марта 2010

можно ли сделать так, чтобы сокет UDP Беркли содержал только одно сообщение UDP? означает, что оно переопределит существующее сообщение, если непрочитанное сообщение будет присутствовать при поступлении нового сообщения?

Ответы [ 2 ]

2 голосов
/ 18 марта 2010

Единственный способ, которым вы могли бы это сделать, - это, насколько я знаю, обрабатывать его на стороне приложения. Я предполагаю, что у вас есть сокет 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.

0 голосов
/ 25 марта 2010

DNS-записи имеют случайный идентификатор транзакции, поэтому приложение может сопоставить результат с запросом. Вы можете попробовать использовать свой собственный идентификатор транзакции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...