Что достигается "сокетом + 1" при совершении вызова select? Unix / C ++ - PullRequest
0 голосов
/ 22 апреля 2020

Я использую сервер прослушивания udp на основе этого https://linux.m2osw.com/c-implementation-udp-clientserver. Я заметил, что при установке получателя таймаута автор включил "f_socket + 1" при вызове выбора. Мне интересно, что именно это делает? Любое объяснение полезно, спасибо!

выдержка из функции сверху ссылка:

    FD_ZERO(&s);
    FD_SET(f_socket, &s);
    struct timeval timeout;
    timeout.tv_sec = max_wait_ms / 1000;
    timeout.tv_usec = (max_wait_ms % 1000) * 1000;
    int retval = select(f_socket + 1, &s, &s, &s, &timeout); 

1 Ответ

4 голосов
/ 22 апреля 2020

См. https://pubs.opengroup.org/onlinepubs/007908799/xsh/select.html

Аргумент nfds указывает диапазон дескрипторов файлов, которые должны быть протестированы. Функция select () проверяет дескрипторы файлов в диапазоне от 0 до nfds -1.

Таким образом, этот аргумент должен быть установлен на 1 больше максимального дескриптора файла, который вы хотите отслеживать.

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