在c中使用套接字时,FD_SET和FD_ISSET背后有什么数据结构?

时间:2009-04-01 05:44:44

标签: c sockets select

使用套接字时,FD_SET和FD_ISSET宏背后有什么数据结构?

2 个答案:

答案 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_ *宏或函数来正确初始化和更改它们。