1 /* 2 * Copyright (C) 2021 Alibaba Group Holding Limited 3 */ 4 5 #ifndef _SYS_SELECT_H 6 #define _SYS_SELECT_H 7 8 #ifdef __cplusplus 9 extern "C" { 10 #endif 11 12 #include <sys/_timeval.h> 13 14 #ifndef FD_SETSIZE 15 #define FD_SETSIZE 1024 16 #endif 17 18 typedef unsigned long fd_mask; 19 typedef struct { 20 unsigned long fds_bits[FD_SETSIZE / 8 / sizeof(long)]; 21 } fd_set; 22 23 #define FD_ZERO(s) do { int __i; unsigned long *__b = (s)->fds_bits; for (__i = sizeof(fd_set) / sizeof(long); __i; __i--) *__b++ = 0; } while (0) 24 #define FD_SET(d, s) ((s)->fds_bits[(d) / (8 * sizeof(long))] |= (1UL << ((d) % (8 * sizeof(long))))) 25 #define FD_CLR(d, s) ((s)->fds_bits[(d) / (8 * sizeof(long))] &= ~(1UL << ((d) % (8 * sizeof(long))))) 26 #define FD_ISSET(d, s) (!!((s)->fds_bits[(d) / (8 * sizeof(long))] & (1UL << ((d) % (8 * sizeof(long)))))) 27 28 int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *errorfds, 29 struct timeval *timeout); 30 31 #ifdef __cplusplus 32 } 33 #endif 34 35 #endif /*_SYS_SELECT_H*/ 36