Значение добавления 1 к файловому дескриптору сокета в функции выбора при использовании сокета Linux

#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);