#c #linux #sockets #select
#c #linux #сокеты #выберите
Вопрос:
В чем смысл добавления 1 к файловому дескриптору сокета при использовании функции выбора?
Я создаю дескриптор файла сокета, как показано ниже,
int sock_file_descriptor;
sock_file_descriptor = socket(AF_INET, SOCK_DGRAM, 0);
и используйте его в функции выбора, как показано ниже,
result = select(sock_file_descriptor 1, amp;readfd, NULL, NULL, 0);
Что означает 1 в функции выбора?
Это даже не работает, когда я удаляю вычисление, добавляющее значение.
Заранее спасибо.
Комментарии:
1. В документации говорится :
nfds
: Этот аргумент должен быть установлен на файловый дескриптор с наибольшим номером в любом из трех наборов плюс 1. Указанные файловые дескрипторы в каждом наборе проверяются до этого предела (но см. ОШИБКИ).
Ответ №1:
RTFM! Первым параметром select
является количество файловых дескрипторов, которые необходимо учитывать:
Аргумент nfds определяет диапазон дескрипторов, подлежащих тестированию. В каждом наборе должны быть проверены первые дескрипторы nfds; то есть должны быть проверены дескрипторы от нуля до nfds-1 в наборах дескрипторов.
Вот пример использования:
// create socket
int sock_file_descriptor;
sock_file_descriptor = socket(AF_INET, SOCK_DGRAM, 0);
// initialize the read fd_set
fd_set read;
FD_ZERO(amp;read);
FD_SET(sock_file_descriptor, amp;read);
// ok we can select
result = select(sock_file_descriptor 1, amp;readfd, NULL, NULL, 0);