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
00030
00031
00032 #ifndef _SYS_SELECT_H_
00033 #define _SYS_SELECT_H_
00034
00035 #include <sys/cdefs.h>
00036 #include <sys/_types.h>
00037
00038 #include <sys/_sigset.h>
00039 #include <sys/_timeval.h>
00040 #include <sys/timespec.h>
00041
00042 typedef unsigned long __fd_mask;
00043 #if __BSD_VISIBLE
00044 typedef __fd_mask fd_mask;
00045 #endif
00046
00047 #ifndef _SIGSET_T_DECLARED
00048 #define _SIGSET_T_DECLARED
00049 typedef __sigset_t sigset_t;
00050 #endif
00051
00052
00053
00054
00055
00056
00057
00058 #ifndef FD_SETSIZE
00059 #define FD_SETSIZE 1024U
00060 #endif
00061
00062 #define _NFDBITS (sizeof(__fd_mask) * 8)
00063 #if __BSD_VISIBLE
00064 #define NFDBITS _NFDBITS
00065 #endif
00066
00067 #ifndef _howmany
00068 #define _howmany(x, y) (((x) + ((y) - 1)) / (y))
00069 #endif
00070
00071 typedef struct fd_set {
00072 __fd_mask __fds_bits[_howmany(FD_SETSIZE, _NFDBITS)];
00073 } fd_set;
00074 #if __BSD_VISIBLE
00075 #define fds_bits __fds_bits
00076 #endif
00077
00078 #define __fdset_mask(n) ((__fd_mask)1 << ((n) % _NFDBITS))
00079 #define FD_CLR(n, p) ((p)->__fds_bits[(n)/_NFDBITS] &= ~__fdset_mask(n))
00080 #if __BSD_VISIBLE
00081 #define FD_COPY(f, t) (void)(*(t) = *(f))
00082 #endif
00083 #define FD_ISSET(n, p) ((p)->__fds_bits[(n)/_NFDBITS] & __fdset_mask(n))
00084 #define FD_SET(n, p) ((p)->__fds_bits[(n)/_NFDBITS] |= __fdset_mask(n))
00085 #define FD_ZERO(p) do { \
00086 fd_set *_p; \
00087 __size_t _n; \
00088 \
00089 _p = (p); \
00090 _n = _howmany(FD_SETSIZE, _NFDBITS); \
00091 while (_n > 0) \
00092 _p->__fds_bits[--_n] = 0; \
00093 } while (0)
00094
00095 #ifndef _KERNEL
00096
00097 __BEGIN_DECLS
00098 #ifndef _SELECT_DECLARED
00099 #define _SELECT_DECLARED
00100
00101 IMPORT_C int select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
00102 #endif
00103 __END_DECLS
00104 #endif
00105
00106 #endif