1 /*        $NetBSD: ntp_select.h,v 1.5 2020/05/25 20:47:20 christos Exp $        */
2 
3 /*
4  * Not all machines define FD_SET in sys/types.h
5  */
6 #ifndef NTP_SELECT_H
7 #define NTP_SELECT_H          /* note: tested by include/l_stdlib.h */
8 
9 /* Was: (defined(RS6000)||defined(SYS_PTX))&&!defined(_BSD) */
10 /* Could say: !defined(FD_SET) && defined(HAVE_SYS_SELECT_H) */
11 /* except FD_SET can legitimately be a typedef... */
12 #if defined(HAVE_SYS_SELECT_H) && !defined(_BSD)
13 # ifndef SYS_VXWORKS
14 #  include <sys/select.h>
15 # else
16 #  include <sockLib.h>
17 extern    int       select(int width, fd_set *pReadFds, fd_set *pWriteFds,
18                            fd_set *pExceptFds, struct timeval *pTimeOut);
19 # endif
20 #endif
21 
22 #if !defined(FD_SET)
23 # define NFDBITS    32
24 # define FD_SETSIZE 32
25 # define FD_SET(n, p)         ((p)->fds_bits[(n)/NFDBITS] |= (1 << ((n) % NFDBITS)))
26 # define FD_CLR(n, p)         ((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS)))
27 # define FD_ISSET(n, p)       ((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS)))
28 # define FD_ZERO(p) memset((p), 0, sizeof(*(p)))
29 #endif
30 
31 #if defined(VMS)
32 typedef struct {
33           unsigned int fds_bits[1];
34 } fd_set;
35 #endif
36 
37 #endif    /* NTP_SELECT_H */
38