xref: /haiku/headers/posix/sys/select.h (revision d3dadb6b5400005b2334defedbd0a540b6baf14d)
1*d3dadb6bSPhilippe Houdoin /* select.h */
2*d3dadb6bSPhilippe Houdoin 
3*d3dadb6bSPhilippe Houdoin #ifndef _SYS_SELECT_H
4*d3dadb6bSPhilippe Houdoin #define _SYS_SELECT_H
5*d3dadb6bSPhilippe Houdoin 
6*d3dadb6bSPhilippe Houdoin #include <sys/time.h> /* for struct timeval */
7*d3dadb6bSPhilippe Houdoin /*
8*d3dadb6bSPhilippe Houdoin  * You can define your own FDSETSIZE if you want more bits
9*d3dadb6bSPhilippe Houdoin  */
10*d3dadb6bSPhilippe Houdoin 
11*d3dadb6bSPhilippe Houdoin #ifndef FD_SETSIZE
12*d3dadb6bSPhilippe Houdoin #define FD_SETSIZE 1024
13*d3dadb6bSPhilippe Houdoin #endif /* FD_SETSIZE */
14*d3dadb6bSPhilippe Houdoin 
15*d3dadb6bSPhilippe Houdoin /* compatability with BSD */
16*d3dadb6bSPhilippe Houdoin #define NBBY    8               /* number of bits in a byte */
17*d3dadb6bSPhilippe Houdoin 
18*d3dadb6bSPhilippe Houdoin typedef unsigned long fd_mask;
19*d3dadb6bSPhilippe Houdoin 
20*d3dadb6bSPhilippe Houdoin #ifndef howmany
21*d3dadb6bSPhilippe Houdoin #define howmany(x, y)   (((x) + ((y) - 1)) / (y))
22*d3dadb6bSPhilippe Houdoin #endif
23*d3dadb6bSPhilippe Houdoin 
24*d3dadb6bSPhilippe Houdoin /*
25*d3dadb6bSPhilippe Houdoin  * Compatibily only: use FD_SETSIZE instead
26*d3dadb6bSPhilippe Houdoin  */
27*d3dadb6bSPhilippe Houdoin #ifndef FDSETSIZE
28*d3dadb6bSPhilippe Houdoin #define FDSETSIZE FD_SETSIZE
29*d3dadb6bSPhilippe Houdoin #endif /* FDSETSIZE */
30*d3dadb6bSPhilippe Houdoin 
31*d3dadb6bSPhilippe Houdoin #define NFDBITS 32
32*d3dadb6bSPhilippe Houdoin 
33*d3dadb6bSPhilippe Houdoin typedef struct fd_set {
34*d3dadb6bSPhilippe Houdoin 	unsigned mask[FDSETSIZE / NFDBITS];
35*d3dadb6bSPhilippe Houdoin } fd_set;
36*d3dadb6bSPhilippe Houdoin 
37*d3dadb6bSPhilippe Houdoin #define _FDMSKNO(fd) ((fd) / NFDBITS)
38*d3dadb6bSPhilippe Houdoin #define _FDBITNO(fd) ((fd) % NFDBITS)
39*d3dadb6bSPhilippe Houdoin 
40*d3dadb6bSPhilippe Houdoin #define FD_ZERO(setp) memset((setp)->mask, 0, sizeof((setp)->mask))
41*d3dadb6bSPhilippe Houdoin #define FD_SET(fd, setp) ((setp)->mask[_FDMSKNO(fd)] |= (1 << (_FDBITNO(fd))))
42*d3dadb6bSPhilippe Houdoin #define FD_CLR(fd, setp) ((setp)->mask[_FDMSKNO(fd)] &= ~(1 << (_FDBITNO(fd))))
43*d3dadb6bSPhilippe Houdoin #define FD_ISSET(fd, setp) ((setp)->mask[_FDMSKNO(fd)] & (1 << (_FDBITNO(fd))))
44*d3dadb6bSPhilippe Houdoin 
45*d3dadb6bSPhilippe Houdoin int select(int nbits, struct fd_set *rbits,
46*d3dadb6bSPhilippe Houdoin                       struct fd_set *wbits,
47*d3dadb6bSPhilippe Houdoin                       struct fd_set *ebits,
48*d3dadb6bSPhilippe Houdoin                       struct timeval *timeout);
49*d3dadb6bSPhilippe Houdoin 
50*d3dadb6bSPhilippe Houdoin #endif /* _SYS_SELECT_H */
51