1 #ifndef _BITS_SYS_SELECT_H 2 #define _BITS_SYS_SELECT_H 3 4 #define FD_SETSIZE 1024 5 6 typedef struct fd_set { 7 unsigned long fds_bits[FD_SETSIZE / (8 * sizeof(unsigned long))]; 8 } fd_set; 9 10 #define _FD_INDEX(fd) ((fd) / (8 * sizeof(unsigned long))) 11 #define _FD_BITMASK(fd) (1UL << ((fd) & (8 * sizeof(unsigned long) - 1))) 12 13 #define FD_ZERO(set) for (int i = 0; i < sizeof((set)->fds_bits) / sizeof(unsigned long); i += 1) { \ 14 (set)->fds_bits[i] = 0; \ 15 } 16 17 #define FD_SET(fd, set) ((set)->fds_bits[_FD_INDEX(fd)] |= _FD_BITMASK(fd)) 18 #define FD_CLR(fd, set) ((set)->fds_bits[_FD_INDEX(fd)] &= ~(_FD_BITMASK(fd))) 19 20 #define FD_ISSET(fd, set) (((set)->fds_bits[_FD_INDEX(fd)] & _FD_BITMASK(fd)) == _FD_BITMASK(fd)) 21 22 #endif 23