使用套接字时,FD_SET和FD_ISSET宏背后的数据结构是什么?
原型:
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;
我似乎记得它只是一个位掩码.一个字符数组(或其他一些基本类型),其中char的每个位表示每个文件描述符的状态.
如果某些实现允许变量大小的结构,但是我见过的大多数(并且这些通常是较旧的)只允许最大数量的文件描述符,它们也有一个限制变量.
但是,只要提供FD_*宏或函数来正确初始化和更改它们,实现就可以自由使用它想要的任何数据结构.