|
- #ifndef _SYS_SELECT_H
- #define _SYS_SELECT_H
-
- /* We don't define fd_set and friends if we are compiling POSIX
- source, or if we have included (or may include as indicated
- by __USE_W32_SOCKETS) the W32api winsock[2].h header which
- defines Windows versions of them. Note that a program which
- includes the W32api winsock[2].h header must know what it is doing;
- it must not call the Cygwin select function.
- */
- # if !(defined (_WINSOCK_H) || defined (_WINSOCKAPI_) || defined (__USE_W32_SOCKETS))
-
- #include <sys/cdefs.h>
- #include <sys/_sigset.h>
- #include <sys/_timeval.h>
- #include <sys/timespec.h>
-
- #if !defined(_SIGSET_T_DECLARED)
- #define _SIGSET_T_DECLARED
- typedef __sigset_t sigset_t;
- #endif
-
- # define _SYS_TYPES_FD_SET
- /*
- * Select uses bit masks of file descriptors in longs.
- * These macros manipulate such bit fields (the filesystem macros use chars).
- * FD_SETSIZE may be defined by the user, but the default here
- * should be >= NOFILE (param.h).
- */
- # ifndef FD_SETSIZE
- # define FD_SETSIZE 64
- # endif
-
- typedef unsigned long fd_mask;
- # define NFDBITS (sizeof (fd_mask) * 8) /* bits per mask */
- # ifndef _howmany
- # define _howmany(x,y) (((x)+((y)-1))/(y))
- # endif
-
- /* We use a macro for fd_set so that including Sockets.h afterwards
- can work. */
- typedef struct _types_fd_set {
- fd_mask fds_bits[_howmany(FD_SETSIZE, NFDBITS)];
- } _types_fd_set;
-
- #define fd_set _types_fd_set
-
- # define FD_SET(n, p) ((p)->fds_bits[(n)/NFDBITS] |= (1L << ((n) % NFDBITS)))
- # define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1L << ((n) % NFDBITS)))
- # define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1L << ((n) % NFDBITS)))
- # define FD_ZERO(p) (__extension__ (void)({ \
- size_t __i; \
- char *__tmp = (char *)p; \
- for (__i = 0; __i < sizeof (*(p)); ++__i) \
- *__tmp++ = 0; \
- }))
-
- #if !defined (__INSIDE_CYGWIN_NET__)
-
- __BEGIN_DECLS
-
- int select __P ((int __n, fd_set *__readfds, fd_set *__writefds,
- fd_set *__exceptfds, struct timeval *__timeout));
- #if __POSIX_VISIBLE >= 200112
- int pselect __P ((int __n, fd_set *__readfds, fd_set *__writefds,
- fd_set *__exceptfds, const struct timespec *__timeout,
- const sigset_t *__set));
- #endif
-
- __END_DECLS
-
- #endif /* !__INSIDE_CYGWIN_NET__ */
-
- #endif /* !(_WINSOCK_H || _WINSOCKAPI_ || __USE_W32_SOCKETS) */
-
- #endif /* sys/select.h */
|