Какая структура данных стоит за FD_SET и FD_ISSET при работе с сокетами в c? - PullRequest
4 голосов
/ 01 апреля 2009

Какая структура данных стоит за макросами FD_SET и FD_ISSET при работе с сокетами?

Ответы [ 2 ]

10 голосов
/ 01 апреля 2009

Прототипы:

void FD_SET(int fd, fd_set* fdset);
int FD_ISSET(int fd, fd_set* fdset);

Из sys / select.h

typedef struct fd_set {
  u_int  fd_count;
  SOCKET fd_array[FD_SETSIZE];
} fd_set;
6 голосов
/ 01 апреля 2009

Кажется, я помню, что это всего лишь битовая маска. Массив символов (или некоторого другого базового типа), где каждый бит символа представляет состояние каждого дескриптора файла.

Некоторые реализации также имеют переменную предела, если они допускают структуры переменного размера, но большинство из того, что я видел (и это, как правило, старые), просто допускают наибольшее количество файловых дескрипторов.

Однако реализация может свободно использовать любую структуру данных, какую пожелает, при условии, что она предоставляет макросы или функции FD_ * для их правильной инициализации и изменения.

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