diff options
Diffstat (limited to 'src/common/fakepoll.h')
-rw-r--r-- | src/common/fakepoll.h | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/common/fakepoll.h b/src/common/fakepoll.h index 44fc63d858..3f3d1610bb 100644 --- a/src/common/fakepoll.h +++ b/src/common/fakepoll.h @@ -44,7 +44,30 @@ struct pollfd { #define POLLNVAL 0x0020 #endif -int tor_poll(struct pollfd *ufds, unsigned int nfds, int timeout); +#ifdef MS_WINDOWS +#define MAXCONNECTIONS 10000 /* XXXX copied from or.h */ +/* This trick makes winsock resize fd_set, which defaults to the insanely low + * 64. */ +#define FD_SETSIZE MAXCONNECTIONS +/* XXXX But Windows FD_SET and FD_CLR are tremendously ugly, and linear in + * the total number of sockets set! Perhaps we should eventually use + * WSAEventSelect and WSAWaitForMultipleEvents instead of select? */ +#endif +#if defined(MS_WINDOWS) || ! defined(USE_FAKE_POLL) +/* If we're using poll, we can poll as many sockets as we want. + * If we're on Windows, having too many sockets is harmless, since + * select stupidly uses an array of sockets rather than a bitfield. */ +#define SOCKET_IS_POLLABLE(fd) ((fd) >= 0) +#else +/* If we're using a real Posix select, then in order to be pollable, a socket + * must + * a) be valid (>= 0) + * b) be < FD_SETSIZE. + */ +#define SOCKET_IS_POLLABLE(fd) ((fd) >= 0 && (fd) < FD_SETSIZE) #endif +int tor_poll(struct pollfd *ufds, unsigned int nfds, int timeout); + +#endif |