#define FD_SET(fd, set) do { / u_int __i; / for (__i = 0; __i < ((fd_set FAR *)(set))->fd_count; __i++) { / if (((fd_set FAR *)(set))->fd_array[__i] == (fd)) { / break; / } / } / if (__i == ((fd_set FAR *)(set))->fd_count) { / if (((fd_set FAR *)(set))->fd_count < FD_SETSIZE) { / ((fd_set FAR *)(set))->fd_array[__i] = (fd); / ((fd_set FAR *)(set))->fd_count++; / } / } / } while(0) 从代码可以看出,首先在set中寻找有没有fd项,找到就直接跳出循环,如果找到末尾都没有找到的话,那么就在末尾加入fd项。同时要保证最终的set里的成员数少于FD_SETSIZE(即64个)。否则不加入。