cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync/*
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncCopyright 1994, 1998 The Open Group
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncPermission to use, copy, modify, distribute, and sell this software and its
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncdocumentation for any purpose is hereby granted without fee, provided that
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncthe above copyright notice appear in all copies and that both that
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsynccopyright notice and this permission notice appear in supporting
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncdocumentation.
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncThe above copyright notice and this permission notice shall be included
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncin all copies or substantial portions of the Software.
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncIN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncOTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncOTHER DEALINGS IN THE SOFTWARE.
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncExcept as contained in this notice, the name of The Open Group shall
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncnot be used in advertising or otherwise to promote the sale, use or
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncother dealings in this Software without prior written authorization
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncfrom The Open Group.
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync*/
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync/*
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * Copyright © 2005 Daniel Stone
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync *
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * Permission to use, copy, modify, distribute, and sell this software and its
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * documentation for any purpose is hereby granted without fee, provided that
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * the above copyright notice appear in all copies and that both that
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * copyright notice and this permission notice appear in supporting
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * documentation, and that the name of Daniel Stone not be used in advertising
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * or publicity pertaining to distribution of the software without specific,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * written prior permission. Daniel Stone makes no representations about the
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * suitability of this software for any purpose. It is provided "as is"
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * without express or implied warranty.
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync *
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * DANIEL STONE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * DANIEL STONE BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync*/
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#ifndef _XPOLL_H_
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define _XPOLL_H_
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#ifndef WIN32
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#ifndef USE_POLL
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#include <X11/Xos.h>
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#include <sys/select.h> /* Get the FD_* macros. */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#include <X11/Xmd.h>
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#ifdef CSRG_BASED
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#include <sys/param.h>
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync# if BSD < 199103
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsynctypedef long fd_mask;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync# endif
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#endif
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define XFD_SETSIZE 256
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#ifndef FD_SETSIZE
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define FD_SETSIZE XFD_SETSIZE
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#endif
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#ifndef NBBY
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define NBBY 8 /* number of bits in a byte */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#endif
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#ifndef NFDBITS
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define NFDBITS (sizeof(fd_mask) * NBBY) /* bits per mask */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#endif
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#ifndef howmany
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define howmany(x,y) (((x)+((y)-1))/(y))
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#endif
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#if defined(BSD) && BSD < 198911
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsynctypedef struct fd_set {
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync fd_mask fds_bits[howmany(FD_SETSIZE, NFDBITS)];
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync} fd_set;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#endif
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync# define Select(n,r,w,e,t) select(n,(fd_set*)r,(fd_set*)w,(fd_set*)e,(struct timeval*)t)
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define __X_FDS_BITS @USE_FDS_BITS@
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#ifndef __FDS_BITS
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync# define __FDS_BITS(p) ((p)->__X_FDS_BITS)
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#endif
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define __XFDS_BITS(p, n) (__FDS_BITS(p))[n]
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#ifndef FD_SET
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define FD_SET(n, p) (__XFDS_BITS(p, ((n)/NFDBITS)) |= ((fd_mask)1 << ((n) % NFDBITS)))
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#endif
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#ifndef FD_CLR
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define FD_CLR(n, p) (__XFDS_BITS((p), ((n)/NFDBITS)) &= ~((fd_mask)1 << ((n) % NFDBITS)))
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#endif
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#ifndef FD_ISSET
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define FD_ISSET(n, p) ((__XFDS_BITS((p), ((n)/NFDBITS))) & ((fd_mask)1 << ((n) % NFDBITS)))
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#endif
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#ifndef FD_ZERO
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define FD_ZERO(p) bzero((char *)(p), sizeof(*(p)))
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#endif
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync/*
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * The howmany(FD_SETSIZE, NFDBITS) computes the number of elements in the
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * array. before accessing an element in the array we check it exists.
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * If it does not exist then the compiler discards the code to access it.
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define XFD_ANYSET(p) \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync ((howmany(FD_SETSIZE, NFDBITS) > 0 && (__XFDS_BITS(p, 0))) || \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync (howmany(FD_SETSIZE, NFDBITS) > 1 && (__XFDS_BITS(p, 1))) || \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync (howmany(FD_SETSIZE, NFDBITS) > 2 && (__XFDS_BITS(p, 2))) || \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync (howmany(FD_SETSIZE, NFDBITS) > 3 && (__XFDS_BITS(p, 3))) || \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync (howmany(FD_SETSIZE, NFDBITS) > 4 && (__XFDS_BITS(p, 4))) || \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync (howmany(FD_SETSIZE, NFDBITS) > 5 && (__XFDS_BITS(p, 5))) || \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync (howmany(FD_SETSIZE, NFDBITS) > 6 && (__XFDS_BITS(p, 6))) || \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync (howmany(FD_SETSIZE, NFDBITS) > 7 && (__XFDS_BITS(p, 7))))
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define XFD_COPYSET(src,dst) { \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int __i__; \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync for (__i__ = 0; __i__ < howmany(FD_SETSIZE, NFDBITS); __i__++) \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync __XFDS_BITS((dst), __i__) = __XFDS_BITS((src), __i__); \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync }
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define XFD_ANDSET(dst,b1,b2) { \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int __i__; \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync for (__i__ = 0; __i__ < howmany(FD_SETSIZE, NFDBITS); __i__++) \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync __XFDS_BITS((dst), __i__) = ((__XFDS_BITS((b1), __i__)) & (__XFDS_BITS((b2), __i__))); \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync }
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define XFD_ORSET(dst,b1,b2) { \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int __i__; \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync for (__i__ = 0; __i__ < howmany(FD_SETSIZE, NFDBITS); __i__++) \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync __XFDS_BITS((dst), __i__) = ((__XFDS_BITS((b1), __i__)) | (__XFDS_BITS((b2), __i__))); \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync }
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define XFD_UNSET(dst,b1) { \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int __i__; \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync for (__i__ = 0; __i__ < howmany(FD_SETSIZE, NFDBITS); __i__++) \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync __XFDS_BITS((dst), __i__) &= ~(__XFDS_BITS((b1), __i__)); \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync }
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#else /* USE_POLL */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#include <sys/poll.h>
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#endif /* USE_POLL */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#else /* WIN32 */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define XFD_SETSIZE 256
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#ifndef FD_SETSIZE
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define FD_SETSIZE XFD_SETSIZE
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#endif
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#include <X11/Xwinsock.h>
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define Select(n,r,w,e,t) select(0,(fd_set*)r,(fd_set*)w,(fd_set*)e,(struct timeval*)t)
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define XFD_SETCOUNT(p) (((fd_set FAR *)(p))->fd_count)
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define XFD_FD(p,i) (((fd_set FAR *)(p))->fd_array[i])
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define XFD_ANYSET(p) XFD_SETCOUNT(p)
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define XFD_COPYSET(src,dst) { \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync u_int __i; \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync FD_ZERO(dst); \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync for (__i = 0; __i < XFD_SETCOUNT(src) ; __i++) { \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync XFD_FD(dst,__i) = XFD_FD(src,__i); \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync } \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync XFD_SETCOUNT(dst) = XFD_SETCOUNT(src); \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync}
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define XFD_ANDSET(dst,b1,b2) { \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync u_int __i; \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync FD_ZERO(dst); \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync for (__i = 0; __i < XFD_SETCOUNT(b1) ; __i++) { \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync if (FD_ISSET(XFD_FD(b1,__i), b2)) \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync FD_SET(XFD_FD(b1,__i), dst); \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync } \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync}
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define XFD_ORSET(dst,b1,b2) { \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync u_int __i; \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync if (dst != b1) XFD_COPYSET(b1,dst); \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync for (__i = 0; __i < XFD_SETCOUNT(b2) ; __i++) { \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync if (!FD_ISSET(XFD_FD(b2,__i), dst)) \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync FD_SET(XFD_FD(b2,__i), dst); \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync } \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync}
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync/* this one is really sub-optimal */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define XFD_UNSET(dst,b1) { \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync u_int __i; \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync for (__i = 0; __i < XFD_SETCOUNT(b1) ; __i++) { \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync FD_CLR(XFD_FD(b1,__i), dst); \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync } \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync}
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync/* we have to pay the price of having an array here, unlike with bitmasks
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync calling twice FD_SET with the same fd is not transparent, so be careful */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#undef FD_SET
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define FD_SET(fd,set) do { \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync if (XFD_SETCOUNT(set) < FD_SETSIZE && !FD_ISSET(fd,set)) \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync XFD_FD(set,XFD_SETCOUNT(set)++)=(fd); \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync} while(0)
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define getdtablesize() FD_SETSIZE
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#endif /* WIN32 */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#endif /* _XPOLL_H_ */