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