xref: /plan9/sys/include/ape/sys/select.h (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
1*9a747e4fSDavid du Colombier #ifndef __SELECT_H
2*9a747e4fSDavid du Colombier #define __SELECT_H
3*9a747e4fSDavid du Colombier #ifndef _BSD_EXTENSION
4*9a747e4fSDavid du Colombier     This header file is an extension to ANSI/POSIX
5*9a747e4fSDavid du Colombier #endif
6*9a747e4fSDavid du Colombier #pragma lib "/$M/lib/ape/libap.a"
7*9a747e4fSDavid du Colombier 
8*9a747e4fSDavid du Colombier #ifndef _FD_SET_T
9*9a747e4fSDavid du Colombier #define _FD_SET_T
10*9a747e4fSDavid du Colombier /* BSD select, and adjunct types and macros */
11*9a747e4fSDavid du Colombier 
12*9a747e4fSDavid du Colombier /* assume 96 fds is sufficient for fdset size */
13*9a747e4fSDavid du Colombier 
14*9a747e4fSDavid du Colombier typedef struct fd_set {
15*9a747e4fSDavid du Colombier 	long fds_bits[3];
16*9a747e4fSDavid du Colombier } fd_set;
17*9a747e4fSDavid du Colombier 
18*9a747e4fSDavid du Colombier #define FD_SET(n,p)	((p)->fds_bits[(n)>>5] |= (1 << ((n) &0x1f)))
19*9a747e4fSDavid du Colombier #define FD_CLR(n,p)	((p)->fds_bits[(n)>>5] &= ~(1 << ((n) &0x1f)))
20*9a747e4fSDavid du Colombier #define FD_ISSET(n,p)	((p)->fds_bits[(n)>>5] & (1 << ((n) &0x1f)))
21*9a747e4fSDavid du Colombier #define FD_ZERO(p)	((p)->fds_bits[0] =0, (p)->fds_bits[1] =0, (p)->fds_bits[2] =0)
22*9a747e4fSDavid du Colombier #endif
23*9a747e4fSDavid du Colombier 
24*9a747e4fSDavid du Colombier #ifdef __cplusplus
25*9a747e4fSDavid du Colombier extern "C" {
26*9a747e4fSDavid du Colombier #endif
27*9a747e4fSDavid du Colombier 
28*9a747e4fSDavid du Colombier extern int select(int, fd_set*, fd_set*, fd_set*, struct timeval *);
29*9a747e4fSDavid du Colombier 
30*9a747e4fSDavid du Colombier #ifdef __cplusplus
31*9a747e4fSDavid du Colombier }
32*9a747e4fSDavid du Colombier #endif
33*9a747e4fSDavid du Colombier 
34*9a747e4fSDavid du Colombier #endif
35