Udp выберите проблемы с таймаутом. Либо тайм-аут, либо чтение со всех клиентовC++

Программы на C++. Форум разработчиков
Anonymous
Udp выберите проблемы с таймаутом. Либо тайм-аут, либо чтение со всех клиентов

Сообщение Anonymous »

Я использую select для обработки соединений на udp-сервере. Если я не получу пакет в течение некоторого периода времени, я хотел бы получить тайм-аут. Проблема в том, что, похоже, я могу либо правильно выполнить тайм-аут и читать только с одного клиента, либо читать со всех клиентов, но не тайм-аут.

Разница в этой функциональности связана с первым аргументом выбора — int nfds

Вот мой код:

Код: Выделить всё

int TIMEOUT = 5;
for (;;) {
FD_ZERO(&read_handles);
FD_SET(udpFD, &read_handles);

timeout.tv_sec = TIMEOUT;
timeout.tv_usec = 0;
if (select(udpFD+1, &read_handles, NULL, NULL, &timeout) == 0) {
printf("Select has timed out...\n");
return 1;
} else {
int length = 1;
if (FD_ISSET(udpFD, &read_handles)) {
//process read.
}
}
}
Эта версия не имеет тайм-аута. Если я изменю строку выбора на:

Код: Выделить всё

if(select(udpFD, &read_handles, NULL, NULL, &timeout) == 0)
У него истекает время ожидания, но он получает данные только от одного из моих клиентов.

udpFD — единственный дескриптор, на который я смотрю, но он имеет значение 4, потому что это не первый дескриптор, который я создал. Я не знаю, имеет ли это значение, поскольку это максимальное значение.

Как я могу одновременно истечь тайм-аутом и получить данные от обоих моих клиентов?

Подробнее здесь: https://stackoverflow.com/questions/227 ... ll-clients

Вернуться в «C++»