- */
-
-// Fill the engine with client file descriptors pending an action
-
-#define epoll_fill int i = epoll_wait(ep, event, 1, 5); \
- if (i > 0) \
- { \
- log(DEBUG,"epoll_wait call: ep=%d, i=%d",ep,i); \
- userrec* cu = fd_ref_table[event[0].data.fd];
-
-#define kqueue_fill ts.tv_sec = 0; \
- ts.tv_nsec = 1000L; \
- int i = kevent(kq, NULL, 0, &ke, 1, &ts); \
- if (i > 0) \
- { \
- log(DEBUG,"kevent call: kq=%d, i=%d",kq,i); \
- userrec* cu = fd_ref_table[ke.ident];
-
-#define select_fill tval.tv_sec = 0; \
- tval.tv_usec = 1000L; \
- selectResult2 = select(FD_SETSIZE, &sfd, NULL, NULL, &tval); \
- if ((selectResult2 > 0) && (xcount != clientlist.end())) \
- for (user_hash::iterator count2a = xcount; count2a != endingiter; count2a++) \
- { \
- if (count2a == clientlist.end()) \
- break; \
- userrec* cu = count2a->second;
-
-#ifdef USE_EPOLL
-#define engine_fill epoll_fill
-#endif
-#ifdef USE_KQUEUE
-#define engine_fill kqueue_fill
-#endif
-#ifdef USE_SELECT
-#define engine_fill select_fill
-#endif
-
-// how to determine if a socket needs attention if further checks are needed
-
-#define epoll_check ((cu->fd != FD_MAGIC_NUMBER) && (cu->fd != -1))
-
-#define kqueue_check ((cu->fd != FD_MAGIC_NUMBER) && (cu->fd != -1))
-
-#define select_check ((cu->fd != FD_MAGIC_NUMBER) && (cu->fd != -1) && (FD_ISSET (cu->fd, &sfd)))
-
-#ifdef USE_EPOLL
-#define engine_check epoll_check
-#endif
-#ifdef USE_KQUEUE
-#define engine_check kqueue_check
-#endif
-#ifdef USE_SELECT
-#define engine_check select_check
-#endif
-
-// how to clean up an exiting client
-
-#define epoll_cleanup log(DEBUG,"InspIRCd: Exited: %s",cu->nick); \
- kill_link(cu,"Client exited"); \
- log(DEBUG,"Bailing from client exit"); \
- goto label;
-
-#define kqueue_cleanup log(DEBUG,"InspIRCd: Exited: %s",cu->nick); \
- kill_link(cu,"Client exited"); \
- log(DEBUG,"Bailing from client exit"); \
- goto label;
-
-#define select_cleanup if (count2->second) \
- { \
- log(DEBUG,"InspIRCd: Exited: %s",cu->nick); \
- kill_link(cu,"Client exited"); \
- log(DEBUG,"Bailing from client exit"); \
- goto label; \
- }
-
-#ifdef USE_EPOLL
-#define engine_cleanup epoll_cleanup
-#endif
-#ifdef USE_KQUEUE
-#define engine_cleanup kqueue_cleanup
-#endif
-#ifdef USE_SELECT
-#define engine_cleanup select_cleanup
-#endif
-
-
-// how to scan the set for fd's requiring action
-
-#define select_scanset for (count = 0; count < boundPortCount; count++) \
- { \
- FD_SET (openSockfd[count], &selectFds); \
- } \
- tv.tv_usec = 30000L; \
- selectResult = select(MAXSOCKS, &selectFds, NULL, NULL, &tv); \
- if (selectResult > 0) \
- { \
- for (count = 0; count < boundPortCount; count++) \
- { \
- if (FD_ISSET (openSockfd[count], &selectFds)) \
- {
-
-#define kqueue_scanset ts.tv_sec = 0; \
- ts.tv_nsec = 30000L; \
- i = kevent(lkq, NULL, 0, ke_list, 32, &ts); \
- if (i > 0) for (j = 0; j < i; j++) \
- { \
- log(DEBUG,"kqueue: Listening socket event, i=%d, ke.ident=%d",i,ke_list[j].ident); \
- for (count = 0; count < boundPortCount; count++) \
- { \
- if ((unsigned)ke_list[j].ident == (unsigned)openSockfd[count]) \
- {
-
-#define epoll_scanset i = epoll_wait(lep, event, 32, EP_DELAY); \
- if (i > 0) for (j = 0; j < i; j++) \
- { \
- log(DEBUG,"epoll: Listening socket event, i=%d,events[j].data.fd=%d",i,event[j].data.fd); \
- for (count = 0; count < boundPortCount; count++) \
- { \
- if ((unsigned)event[j].data.fd == (unsigned)openSockfd[count]) \
- {
-
-#ifdef USE_EPOLL
-#define engine_scanset epoll_scanset
-#endif
-#ifdef USE_KQUEUE
-#define engine_scanset kqueue_scanset
-#endif
-#ifdef USE_SELECT
-#define engine_scanset select_scanset
-#endif
-
-// how to populate the list with fds before asking for change notification
-
-#define epoll_server_populate i = epoll_wait(sep, event, 1, EP_DELAY); \
- if (i > 0) \
- { \
- log(DEBUG,"epoll: Listening server socket event, i=%d, event.data.fd=%d",i,event[0].data.fd); \
- for (int x = 0; x != SERVERportCount; x++) \
- { \
- if ((me[x]) && ((unsigned)event[0].data.fd == (unsigned)me[x]->fd)) \
- {
-#define kqueue_server_populate ts.tv_sec = 0; \
- ts.tv_nsec = 30000L; \
- i = kevent(skq, NULL, 0, &ke, 1, &ts); \
- if (i > 0) \
- { \
- log(DEBUG,"kqueue: Listening server socket event, i=%d, ke.ident=%d",i,ke.ident); \
- for (int x = 0; x != SERVERportCount; x++) \
- { \
- if ((me[x]) && ((unsigned)ke.ident == (unsigned)me[x]->fd)) \
- {
-
-#define select_server_populate FD_ZERO(&serverfds); \
- for (int x = 0; x != SERVERportCount; x++) \
- { \
- if (me[x]) \
- FD_SET(me[x]->fd, &serverfds); \
- } \
- tvs.tv_usec = 30000L; \
- tvs.tv_sec = 0; \
- int servresult = select(FD_SETSIZE, &serverfds, NULL, NULL, &tvs); \
- if (servresult > 0) \
- { \
- for (int x = 0; x != SERVERportCount; x++) \
- { \
- if ((me[x]) && (FD_ISSET (me[x]->fd, &serverfds))) \
- {