/usr/include/sys/select.h


    1 /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
    2 /*	Copyright (c) 1998 by Sun Microsystems, Inc.	*/
    3 /*	  All Rights Reserved  	*/
    4 
    5 /*	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T	*/
    6 /*	The copyright notice above does not evidence any   	*/
    7 /*	actual or intended publication of such source code.	*/
    8 
    9 #ifndef _SYS_SELECT_H
   10 #define	_SYS_SELECT_H
   11 
   12 #pragma ident	"@(#)select.h	1.16	98/04/27 SMI"	/* SVr4.0 1.2 */
   13 
   14 #include <sys/feature_tests.h>
   15 
   16 #ifndef _KERNEL
   17 #include <sys/time.h>
   18 #endif
   19 
   20 #ifdef	__cplusplus
   21 extern "C" {
   22 #endif
   23 
   24 /*
   25  * Select uses bit masks of file descriptors in longs.
   26  * These macros manipulate such bit fields.
   27  * FD_SETSIZE may be defined by the user, but the default here
   28  * should be >= NOFILE (param.h).
   29  */
   30 #ifndef	FD_SETSIZE
   31 #ifdef _LP64
   32 #define	FD_SETSIZE	65536
   33 #else
   34 #define	FD_SETSIZE	1024
   35 #endif	/* _LP64 */
   36 #elif FD_SETSIZE > 1024 && !defined(_LP64)
   37 #ifdef __PRAGMA_REDEFINE_EXTNAME
   38 #pragma	redefine_extname	select	select_large_fdset
   39 #else	/* __PRAGMA_REDEFINE_EXTNAME */
   40 #define	select	select_large_fdset
   41 #endif	/* __PRAGMA_REDEFINE_EXTNAME */
   42 #endif	/* FD_SETSIZE */
   43 
   44 #if !defined(_XPG4_2) || defined(__EXTENSIONS__)
   45 typedef	long	fd_mask;
   46 #endif
   47 typedef	long	fds_mask;
   48 
   49 /*
   50  *  The value of _NBBY needs to be consistant with the value
   51  *  of NBBY in <sys/param.h>.
   52  */
   53 #define	_NBBY 8
   54 #if !defined(_XPG4_2) || defined(__EXTENSIONS__)
   55 #ifndef NBBY		/* number of bits per byte */
   56 #define	NBBY _NBBY
   57 #endif
   58 #endif /* !defined(_XPG4_2) || defined(__EXTENSIONS__) */
   59 
   60 #if !defined(_XPG4_2) || defined(__EXTENSIONS__)
   61 #define	NFDBITS		(sizeof (fd_mask) * NBBY)	/* bits per mask */
   62 #endif
   63 #define	FD_NFDBITS	(sizeof (fds_mask) * _NBBY)	/* bits per mask */
   64 
   65 #define	__howmany(__x, __y)	(((__x)+((__y)-1))/(__y))
   66 #if !defined(_XPG4_2) || defined(__EXTENSIONS__)
   67 #ifndef	howmany
   68 #define	howmany(x, y)	(((x)+((y)-1))/(y))
   69 #endif
   70 #endif /* !defined(_XPG4_2) || defined(__EXTENSIONS__) */
   71 
   72 #if !defined(_XPG4_2) || defined(__EXTENSIONS__)
   73 typedef	struct fd_set {
   74 #else
   75 typedef	struct __fd_set {
   76 #endif
   77 	long	fds_bits[__howmany(FD_SETSIZE, FD_NFDBITS)];
   78 } fd_set;
   79 
   80 #define	FD_SET(__n, __p)	((__p)->fds_bits[(__n)/FD_NFDBITS] |= \
   81 				    (1ul << ((__n) % FD_NFDBITS)))
   82 
   83 #define	FD_CLR(__n, __p)	((__p)->fds_bits[(__n)/FD_NFDBITS] &= \
   84 				    ~(1ul << ((__n) % FD_NFDBITS)))
   85 
   86 #define	FD_ISSET(__n, __p)	(((__p)->fds_bits[(__n)/FD_NFDBITS] & \
   87 				    (1ul << ((__n) % FD_NFDBITS))) != 0l)
   88 
   89 #ifdef _KERNEL
   90 #define	FD_ZERO(p)	bzero((p), sizeof (*(p)))
   91 #else
   92 #define	FD_ZERO(__p)	memset((void *)(__p), 0, sizeof (*(__p)))
   93 #endif /* _KERNEL */
   94 
   95 #ifndef	_KERNEL
   96 #ifdef	__STDC__
   97 extern int select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
   98 #else
   99 extern int select();
  100 #endif	/* __STDC__ */
  101 #endif	/* _KERNEL */
  102 
  103 #ifdef	__cplusplus
  104 }
  105 #endif
  106 
  107 #endif	/* _SYS_SELECT_H */