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