00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef _ABLE_CLIB_SYS_SELECT_H
00030 #define _ABLE_CLIB_SYS_SELECT_H 1
00031
00032 #include <sys/time.h>
00033 #include <signal.h>
00034
00035
00036
00037
00038
00039
00040
00041
00042 #undef FD_SETSIZE
00043 #undef NFDBITS
00044 #undef __FDELT
00045 #undef __FDMASK
00046 #undef __FDS_BITS
00047 #undef FD_ZERO
00048 #undef FD_SET
00049 #undef FD_CLR
00050 #undef FD_ISSET
00051
00053 #define FD_SETSIZE 32
00054
00058 typedef unsigned long fd_mask;
00059
00063 #define NFDBITS (8 * sizeof(fd_mask))
00064
00066 typedef struct {
00067 fd_mask fds_bits[FD_SETSIZE / NFDBITS];
00068 } fd_set;
00069
00070
00071 #define __FDS_BITS(set) ((set)->fds_bits)
00072 #define __FDELT(x) ((x) / NFDBITS)
00073 #define __FDMASK(x) ((fd_mask) 1 << ((x) % NFDBITS))
00074
00076 #define FD_ZERO(fdsetp) \
00077 do { \
00078 unsigned int __bit; \
00079 fd_set *__arr = (fdsetp); \
00080 for (__bit = 0; __bit < sizeof(fd_set) / sizeof(fd_mask); ++__bit) \
00081 __FDS_BITS(__arr)[__bit] = 0; \
00082 } while (0)
00083
00085 #define FD_SET(fd, fdsetp) (__FDS_BITS(fdsetp)[__FDELT(fd)] |= __FDMASK(fd))
00086
00088 #define FD_CLR(fd, fdsetp) (__FDS_BITS(fdsetp)[__FDELT(fd)] &= ~__FDMASK(fd))
00089
00091 #define FD_ISSET(fd, fdsetp) ((__FDS_BITS(fdsetp)[__FDELT(fd)] & __FDMASK(fd)) != 0)
00092
00107 extern int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
00108
00124 extern int pselect(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timespec *timeout, const sigset_t *sigmask);
00125
00126 #endif