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