#define INIT_IOEVENT { NULL, -1, 0, NULL }
#define IO_ERROR 4
+#define MAX_EVENTS 100
#ifdef HAVE_EPOLL_CREATE
# define IO_USE_EPOLL 1
static int io_dispatch_kqueue(struct timeval *tv);
static bool io_event_change_kqueue(int, short, const int action);
+
+#ifndef EV_SET
+/* Taken from /usr/include/sys/event.h of FreeBSD 8.1 and required by all
+ * platforms that have kqueue but lack EV_SET() -- for example FreeBSD 4. */
+#define EV_SET(kevp, a, b, c, d, e, f) do { \
+ struct kevent *__kevp__ = (kevp); \
+ __kevp__->ident = (a); \
+ __kevp__->filter = (b); \
+ __kevp__->flags = (c); \
+ __kevp__->fflags = (d); \
+ __kevp__->data = (e); \
+ __kevp__->udata = (f); \
+} while(0)
+#endif
#endif
#ifdef IO_USE_POLL
time_t sec = tv->tv_sec * 1000;
int i, ret, timeout = tv->tv_usec + sec;
short what;
- struct pollfd p[100];
+ struct pollfd p[MAX_EVENTS];
if (timeout < 0)
timeout = 1000;
dvp.dp_timeout = timeout;
- dvp.dp_nfds = 100;
+ dvp.dp_nfds = MAX_EVENTS;
dvp.dp_fds = p;
ret = ioctl(io_masterfd, DP_POLL, &dvp);
{
time_t sec = tv->tv_sec * 1000;
int i, ret, timeout = tv->tv_usec + sec;
- struct epoll_event epoll_ev[100];
+ struct epoll_event epoll_ev[MAX_EVENTS];
short type;
if (timeout < 0)
timeout = 1000;
- ret = epoll_wait(io_masterfd, epoll_ev, 100, timeout);
+ ret = epoll_wait(io_masterfd, epoll_ev, MAX_EVENTS, timeout);
for (i = 0; i < ret; i++) {
type = 0;
io_dispatch_kqueue(struct timeval *tv)
{
int i, ret;
- struct kevent kev[100];
+ struct kevent kev[MAX_EVENTS];
struct kevent *newevents;
struct timespec ts;
int newevents_len;
newevents = (newevents_len > 0) ? array_start(&io_evcache) : NULL;
assert(newevents_len >= 0);
- ret = kevent(io_masterfd, newevents, newevents_len, kev, 100, &ts);
+ ret = kevent(io_masterfd, newevents, newevents_len, kev, MAX_EVENTS, &ts);
if (newevents && ret != -1)
array_trunc(&io_evcache);
io_masterfd = kqueue();
Log(LOG_INFO,
- "IO subsystem: kqueue (initial maxfd %u, masterfd %d)",
+ "IO subsystem: kqueue (initial maxfd %u, masterfd %d).",
eventsize, io_masterfd);
if (io_masterfd >= 0)
library_initialized = true;