New configure option "--without-select"; when usin epoll() IO API include
support for select() as well by default and fall back on runtime when needed.
This commit is contained in:
parent
ee568cc444
commit
5c78230283
|
@ -12,6 +12,10 @@
|
||||||
|
|
||||||
ngIRCd HEAD
|
ngIRCd HEAD
|
||||||
|
|
||||||
|
- When using epoll() IO interface, compile in the select() interface as
|
||||||
|
well and fall back to it when epoll() isn't available on runtime.
|
||||||
|
- New configure option "--without-select" to disable select() IO API
|
||||||
|
(even when using epoll(), see above).
|
||||||
- Added support for IO APIs "poll()" and "/dev/poll".
|
- Added support for IO APIs "poll()" and "/dev/poll".
|
||||||
- Reorganized internal handling of invite and ban lists.
|
- Reorganized internal handling of invite and ban lists.
|
||||||
|
|
||||||
|
@ -678,4 +682,4 @@ ngIRCd 0.0.1, 31.12.2001
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
$Id: ChangeLog,v 1.311 2006/12/17 21:00:30 alex Exp $
|
$Id: ChangeLog,v 1.312 2006/12/26 16:00:45 alex Exp $
|
||||||
|
|
85
configure.in
85
configure.in
|
@ -8,7 +8,7 @@
|
||||||
# (at your option) any later version.
|
# (at your option) any later version.
|
||||||
# Please read the file COPYING, README and AUTHORS for more information.
|
# Please read the file COPYING, README and AUTHORS for more information.
|
||||||
#
|
#
|
||||||
# $Id: configure.in,v 1.124 2006/10/02 21:57:13 fw Exp $
|
# $Id: configure.in,v 1.125 2006/12/26 16:00:45 alex Exp $
|
||||||
#
|
#
|
||||||
|
|
||||||
# -- Initialisation --
|
# -- Initialisation --
|
||||||
|
@ -143,12 +143,10 @@ AC_CHECK_FUNCS([ \
|
||||||
|
|
||||||
AC_CHECK_FUNCS(inet_aton isdigit sigaction snprintf vsnprintf strdup strlcpy strlcat)
|
AC_CHECK_FUNCS(inet_aton isdigit sigaction snprintf vsnprintf strdup strlcpy strlcat)
|
||||||
|
|
||||||
AC_CHECK_FUNCS(select,[AC_CHECK_HEADERS(sys/select.h)],
|
|
||||||
AC_MSG_ERROR([required function select() is missing!])
|
|
||||||
)
|
|
||||||
|
|
||||||
# -- Configuration options --
|
# -- Configuration options --
|
||||||
|
|
||||||
|
# use syslog?
|
||||||
|
|
||||||
x_syslog_on=no
|
x_syslog_on=no
|
||||||
AC_ARG_WITH(syslog,
|
AC_ARG_WITH(syslog,
|
||||||
[ --without-syslog disable syslog (autodetected by default)],
|
[ --without-syslog disable syslog (autodetected by default)],
|
||||||
|
@ -174,6 +172,8 @@ if test "$x_syslog_on" = "yes"; then
|
||||||
AC_CHECK_HEADERS(syslog.h,,AC_MSG_ERROR([required C header missing!]))
|
AC_CHECK_HEADERS(syslog.h,,AC_MSG_ERROR([required C header missing!]))
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# use zlib compression?
|
||||||
|
|
||||||
x_zlib_on=no
|
x_zlib_on=no
|
||||||
AC_ARG_WITH(zlib,
|
AC_ARG_WITH(zlib,
|
||||||
[ --without-zlib disable zlib compression (autodetected by default)],
|
[ --without-zlib disable zlib compression (autodetected by default)],
|
||||||
|
@ -198,8 +198,28 @@ if test "$x_zlib_on" = "yes"; then
|
||||||
AC_CHECK_HEADERS(zlib.h,,AC_MSG_ERROR([required C header missing!]))
|
AC_CHECK_HEADERS(zlib.h,,AC_MSG_ERROR([required C header missing!]))
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# detect which IO API to use:
|
||||||
|
|
||||||
|
x_io_backend=none
|
||||||
|
|
||||||
|
AC_ARG_WITH(select,
|
||||||
|
[ --without-select disable select IO support (autodetected by default)],
|
||||||
|
[ if test "$withval" != "no"; then
|
||||||
|
if test "$withval" != "yes"; then
|
||||||
|
CFLAGS="-I$withval/include $CFLAGS"
|
||||||
|
CPPFLAGS="-I$withval/include $CPPFLAGS"
|
||||||
|
LDFLAGS="-L$withval/lib $LDFLAGS"
|
||||||
|
fi
|
||||||
|
AC_CHECK_FUNCS(select, x_io_select=yes,
|
||||||
|
AC_MSG_ERROR([Can't enable select IO support!])
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
],
|
||||||
|
[
|
||||||
|
AC_CHECK_FUNCS(select, x_io_select=yes)
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
x_io_backend=select\(\)
|
|
||||||
AC_ARG_WITH(poll,
|
AC_ARG_WITH(poll,
|
||||||
[ --without-poll disable poll support (autodetected by default)],
|
[ --without-poll disable poll support (autodetected by default)],
|
||||||
[ if test "$withval" != "no"; then
|
[ if test "$withval" != "no"; then
|
||||||
|
@ -209,7 +229,7 @@ AC_ARG_WITH(poll,
|
||||||
LDFLAGS="-L$withval/lib $LDFLAGS"
|
LDFLAGS="-L$withval/lib $LDFLAGS"
|
||||||
fi
|
fi
|
||||||
AC_CHECK_FUNCS(poll, x_io_backend=poll\(\),
|
AC_CHECK_FUNCS(poll, x_io_backend=poll\(\),
|
||||||
AC_MSG_ERROR([Can't enable poll support!])
|
AC_MSG_ERROR([Can't enable poll IO support!])
|
||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
],
|
],
|
||||||
|
@ -218,9 +238,8 @@ AC_ARG_WITH(poll,
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
AC_ARG_WITH(devpoll,
|
AC_ARG_WITH(devpoll,
|
||||||
[ --without-devpoll disable /dev/poll support (autodetected by default)],
|
[ --without-devpoll disable /dev/poll IO support (autodetected by default)],
|
||||||
[ if test "$withval" != "no"; then
|
[ if test "$withval" != "no"; then
|
||||||
if test "$withval" != "yes"; then
|
if test "$withval" != "yes"; then
|
||||||
CFLAGS="-I$withval/include $CFLAGS"
|
CFLAGS="-I$withval/include $CFLAGS"
|
||||||
|
@ -232,31 +251,30 @@ AC_ARG_WITH(devpoll,
|
||||||
fi
|
fi
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
AC_CHECK_HEADERS(sys/devpoll.h,x_io_backend=/dev/poll,)
|
AC_CHECK_HEADERS(sys/devpoll.h, x_io_backend=/dev/poll)
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
AC_ARG_WITH(epoll,
|
AC_ARG_WITH(epoll,
|
||||||
[ --without-epoll disable epoll support (autodetected by default)],
|
[ --without-epoll disable epoll IO support (autodetected by default)],
|
||||||
[ if test "$withval" != "no"; then
|
[ if test "$withval" != "no"; then
|
||||||
if test "$withval" != "yes"; then
|
if test "$withval" != "yes"; then
|
||||||
CFLAGS="-I$withval/include $CFLAGS"
|
CFLAGS="-I$withval/include $CFLAGS"
|
||||||
CPPFLAGS="-I$withval/include $CPPFLAGS"
|
CPPFLAGS="-I$withval/include $CPPFLAGS"
|
||||||
LDFLAGS="-L$withval/lib $LDFLAGS"
|
LDFLAGS="-L$withval/lib $LDFLAGS"
|
||||||
fi
|
fi
|
||||||
AC_CHECK_FUNCS(epoll_create, x_io_backend=epoll\(\),
|
AC_CHECK_FUNCS(epoll_create, x_io_epoll=yes,
|
||||||
AC_MSG_ERROR([Can't enable epoll support!])
|
AC_MSG_ERROR([Can't enable epoll IO support!])
|
||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
AC_CHECK_FUNCS(epoll_create, x_io_backend=epoll\(\))
|
AC_CHECK_FUNCS(epoll_create, x_io_epoll=yes)
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
AC_ARG_WITH(kqueue,
|
AC_ARG_WITH(kqueue,
|
||||||
[ --without-kqueue disable kqueue support (autodetected by default)],
|
[ --without-kqueue disable kqueue IO support (autodetected by default)],
|
||||||
[ if test "$withval" != "no"; then
|
[ if test "$withval" != "no"; then
|
||||||
if test "$withval" != "yes"; then
|
if test "$withval" != "yes"; then
|
||||||
CFLAGS="-I$withval/include $CFLAGS"
|
CFLAGS="-I$withval/include $CFLAGS"
|
||||||
|
@ -264,7 +282,7 @@ AC_ARG_WITH(kqueue,
|
||||||
LDFLAGS="-L$withval/lib $LDFLAGS"
|
LDFLAGS="-L$withval/lib $LDFLAGS"
|
||||||
fi
|
fi
|
||||||
AC_CHECK_FUNCS(kqueue, x_io_backend=kqueue\(\),
|
AC_CHECK_FUNCS(kqueue, x_io_backend=kqueue\(\),
|
||||||
AC_MSG_ERROR([Can't enable kqueue support!])
|
AC_MSG_ERROR([Can't enable kqueue IO support!])
|
||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
],
|
],
|
||||||
|
@ -273,6 +291,27 @@ AC_ARG_WITH(kqueue,
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if test "$x_io_epoll" = "yes" -a "$x_io_select" = "yes"; then
|
||||||
|
# when epoll() and select() are available, we'll use both!
|
||||||
|
x_io_backend="epoll(), select()"
|
||||||
|
else
|
||||||
|
if test "$x_io_epoll" = "yes"; then
|
||||||
|
# we prefere epoll() if it is available
|
||||||
|
x_io_backend="epoll()"
|
||||||
|
else
|
||||||
|
if test "$x_io_select" = "yes" -a "$x_io_backend" = "none"; then
|
||||||
|
# we'll use select, when available and no "better"
|
||||||
|
# interface has been detected ...
|
||||||
|
x_io_backend="select()"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "$x_io_backend" = "none"; then
|
||||||
|
AC_MSG_ERROR([No useabe IO API activated/found!?])
|
||||||
|
fi
|
||||||
|
|
||||||
|
# use TCP wrappers?
|
||||||
|
|
||||||
x_tcpwrap_on=no
|
x_tcpwrap_on=no
|
||||||
AC_ARG_WITH(tcp-wrappers,
|
AC_ARG_WITH(tcp-wrappers,
|
||||||
|
@ -303,6 +342,8 @@ int deny_severity = 0;
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# include support for "zeroconf"?
|
||||||
|
|
||||||
x_zeroconf_on=no
|
x_zeroconf_on=no
|
||||||
AC_ARG_WITH(zeroconf,
|
AC_ARG_WITH(zeroconf,
|
||||||
[ --with-zeroconf enable support for "Zeroconf"],
|
[ --with-zeroconf enable support for "Zeroconf"],
|
||||||
|
@ -351,6 +392,8 @@ if test "$x_zeroconf_on" = "howl"; then
|
||||||
AC_DEFINE(ZEROCONF, 1)
|
AC_DEFINE(ZEROCONF, 1)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# do IDENT requests using libident?
|
||||||
|
|
||||||
x_identauth_on=no
|
x_identauth_on=no
|
||||||
AC_ARG_WITH(ident,
|
AC_ARG_WITH(ident,
|
||||||
[ --with-ident enable "IDENT" ("AUTH") protocol support],
|
[ --with-ident enable "IDENT" ("AUTH") protocol support],
|
||||||
|
@ -372,6 +415,8 @@ if test "$x_identauth_on" = "yes"; then
|
||||||
AC_CHECK_HEADERS(ident.h,,AC_MSG_ERROR([required C header missing!]))
|
AC_CHECK_HEADERS(ident.h,,AC_MSG_ERROR([required C header missing!]))
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# compile in IRC+ protocol support?
|
||||||
|
|
||||||
x_ircplus_on=yes
|
x_ircplus_on=yes
|
||||||
AC_ARG_ENABLE(ircplus,
|
AC_ARG_ENABLE(ircplus,
|
||||||
[ --disable-ircplus disable IRC+ protocol],
|
[ --disable-ircplus disable IRC+ protocol],
|
||||||
|
@ -381,6 +426,8 @@ if test "$x_ircplus_on" = "yes"; then
|
||||||
AC_DEFINE(IRCPLUS, 1)
|
AC_DEFINE(IRCPLUS, 1)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# compile in IRC "sniffer"?
|
||||||
|
|
||||||
x_sniffer_on=no; x_debug_on=no
|
x_sniffer_on=no; x_debug_on=no
|
||||||
AC_ARG_ENABLE(sniffer,
|
AC_ARG_ENABLE(sniffer,
|
||||||
[ --enable-sniffer enable IRC traffic sniffer (enables debug mode)],
|
[ --enable-sniffer enable IRC traffic sniffer (enables debug mode)],
|
||||||
|
@ -390,6 +437,8 @@ AC_ARG_ENABLE(sniffer,
|
||||||
fi
|
fi
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# enable additional debugging code?
|
||||||
|
|
||||||
AC_ARG_ENABLE(debug,
|
AC_ARG_ENABLE(debug,
|
||||||
[ --enable-debug show additional debug output],
|
[ --enable-debug show additional debug output],
|
||||||
if test "$enableval" = "yes"; then x_debug_on=yes; fi
|
if test "$enableval" = "yes"; then x_debug_on=yes; fi
|
||||||
|
@ -399,6 +448,8 @@ if test "$x_debug_on" = "yes"; then
|
||||||
test "$GCC" = "yes" && CFLAGS="-pedantic $CFLAGS"
|
test "$GCC" = "yes" && CFLAGS="-pedantic $CFLAGS"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# enable "strict RFC rules"?
|
||||||
|
|
||||||
x_strict_rfc_on=no
|
x_strict_rfc_on=no
|
||||||
AC_ARG_ENABLE(strict-rfc,
|
AC_ARG_ENABLE(strict-rfc,
|
||||||
[ --enable-strict-rfc strict RFC conformance -- may break clients!],
|
[ --enable-strict-rfc strict RFC conformance -- may break clients!],
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
#include "portab.h"
|
#include "portab.h"
|
||||||
|
|
||||||
static char UNUSED id[] = "$Id: io.c,v 1.22 2006/12/16 22:48:34 fw Exp $";
|
static char UNUSED id[] = "$Id: io.c,v 1.23 2006/12/26 16:00:46 alex Exp $";
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
@ -34,33 +34,40 @@ typedef struct {
|
||||||
short what;
|
short what;
|
||||||
} io_event;
|
} io_event;
|
||||||
|
|
||||||
#define INIT_IOEVENT { NULL, -1, 0, NULL }
|
#define INIT_IOEVENT { NULL, -1, 0, NULL }
|
||||||
#define IO_ERROR 4
|
#define IO_ERROR 4
|
||||||
|
|
||||||
#ifdef HAVE_EPOLL_CREATE
|
#ifdef HAVE_EPOLL_CREATE
|
||||||
#define IO_USE_EPOLL 1
|
# define IO_USE_EPOLL 1
|
||||||
|
# ifdef HAVE_SELECT
|
||||||
|
# define IO_USE_SELECT 1
|
||||||
|
# endif
|
||||||
#else
|
#else
|
||||||
# ifdef HAVE_KQUEUE
|
# ifdef HAVE_KQUEUE
|
||||||
#define IO_USE_KQUEUE 1
|
# define IO_USE_KQUEUE 1
|
||||||
# else
|
# else
|
||||||
# ifdef HAVE_SYS_DEVPOLL_H
|
# ifdef HAVE_SYS_DEVPOLL_H
|
||||||
#define IO_USE_DEVPOLL 1
|
# define IO_USE_DEVPOLL 1
|
||||||
# else
|
# else
|
||||||
# ifdef HAVE_POLL
|
# ifdef HAVE_POLL
|
||||||
#define IO_USE_POLL 1
|
# define IO_USE_POLL 1
|
||||||
|
# else
|
||||||
|
# ifdef HAVE_SELECT
|
||||||
|
# define IO_USE_SELECT 1
|
||||||
# else
|
# else
|
||||||
#define IO_USE_SELECT 1
|
# error "no IO API available!?"
|
||||||
|
# endif /* HAVE_SELECT */
|
||||||
# endif /* HAVE_POLL */
|
# endif /* HAVE_POLL */
|
||||||
# endif /* HAVE_SYS_DEVPOLL_H */
|
# endif /* HAVE_SYS_DEVPOLL_H */
|
||||||
# endif /* HAVE_KQUEUE */
|
# endif /* HAVE_KQUEUE */
|
||||||
#endif /* HAVE_EPOLL_CREATE */
|
#endif /* HAVE_EPOLL_CREATE */
|
||||||
|
|
||||||
static bool library_initialized;
|
static bool library_initialized = false;
|
||||||
|
|
||||||
#ifdef IO_USE_EPOLL
|
#ifdef IO_USE_EPOLL
|
||||||
#include <sys/epoll.h>
|
#include <sys/epoll.h>
|
||||||
|
|
||||||
static int io_masterfd;
|
static int io_masterfd = -1;
|
||||||
static bool io_event_change_epoll(int fd, short what, const int action);
|
static bool io_event_change_epoll(int fd, short what, const int action);
|
||||||
static int io_dispatch_epoll(struct timeval *tv);
|
static int io_dispatch_epoll(struct timeval *tv);
|
||||||
#endif
|
#endif
|
||||||
|
@ -101,7 +108,11 @@ static fd_set readers;
|
||||||
static fd_set writers;
|
static fd_set writers;
|
||||||
static int select_maxfd; /* the select() interface sucks badly */
|
static int select_maxfd; /* the select() interface sucks badly */
|
||||||
static int io_dispatch_select(struct timeval *tv);
|
static int io_dispatch_select(struct timeval *tv);
|
||||||
|
|
||||||
|
#ifndef IO_USE_EPOLL
|
||||||
|
#define io_masterfd -1
|
||||||
#endif
|
#endif
|
||||||
|
#endif /* IO_USE_SELECT */
|
||||||
|
|
||||||
static array io_events;
|
static array io_events;
|
||||||
|
|
||||||
|
@ -187,11 +198,12 @@ io_library_init_epoll(unsigned int eventsize)
|
||||||
if (ecreate_hint <= 0)
|
if (ecreate_hint <= 0)
|
||||||
ecreate_hint = 128;
|
ecreate_hint = 128;
|
||||||
io_masterfd = epoll_create(ecreate_hint);
|
io_masterfd = epoll_create(ecreate_hint);
|
||||||
Log(LOG_INFO,
|
if (io_masterfd >= 0) {
|
||||||
"IO subsystem: epoll (hint size %d, initial maxfd %u, masterfd %d).",
|
|
||||||
ecreate_hint, eventsize, io_masterfd);
|
|
||||||
if (io_masterfd >= 0)
|
|
||||||
library_initialized = true;
|
library_initialized = true;
|
||||||
|
Log(LOG_INFO,
|
||||||
|
"IO subsystem: epoll (hint size %d, initial maxfd %u, masterfd %d).",
|
||||||
|
ecreate_hint, eventsize, io_masterfd);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -229,6 +241,10 @@ io_library_init(unsigned int eventsize)
|
||||||
eventsize = 0;
|
eventsize = 0;
|
||||||
#ifdef IO_USE_EPOLL
|
#ifdef IO_USE_EPOLL
|
||||||
io_library_init_epoll(eventsize);
|
io_library_init_epoll(eventsize);
|
||||||
|
#ifdef IO_USE_SELECT
|
||||||
|
if (io_masterfd < 0)
|
||||||
|
Log(LOG_INFO, "Can't initialize epoll() IO interface, falling back to select() ...");
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#ifdef IO_USE_KQUEUE
|
#ifdef IO_USE_KQUEUE
|
||||||
io_library_init_kqueue(eventsize);
|
io_library_init_kqueue(eventsize);
|
||||||
|
@ -240,7 +256,8 @@ io_library_init(unsigned int eventsize)
|
||||||
io_library_init_poll(eventsize);
|
io_library_init_poll(eventsize);
|
||||||
#endif
|
#endif
|
||||||
#ifdef IO_USE_SELECT
|
#ifdef IO_USE_SELECT
|
||||||
io_library_init_select(eventsize);
|
if (! library_initialized)
|
||||||
|
io_library_init_select(eventsize);
|
||||||
#endif
|
#endif
|
||||||
return library_initialized;
|
return library_initialized;
|
||||||
}
|
}
|
||||||
|
@ -254,7 +271,8 @@ io_library_shutdown(void)
|
||||||
FD_ZERO(&writers);
|
FD_ZERO(&writers);
|
||||||
#endif
|
#endif
|
||||||
#ifdef IO_USE_EPOLL
|
#ifdef IO_USE_EPOLL
|
||||||
close(io_masterfd);
|
if (io_masterfd >= 0)
|
||||||
|
close(io_masterfd);
|
||||||
io_masterfd = -1;
|
io_masterfd = -1;
|
||||||
#endif
|
#endif
|
||||||
#ifdef IO_USE_KQUEUE
|
#ifdef IO_USE_KQUEUE
|
||||||
|
@ -316,7 +334,8 @@ io_event_create(int fd, short what, void (*cbfunc) (int, short))
|
||||||
ret = io_event_change_kqueue(fd, what, EV_ADD|EV_ENABLE);
|
ret = io_event_change_kqueue(fd, what, EV_ADD|EV_ENABLE);
|
||||||
#endif
|
#endif
|
||||||
#ifdef IO_USE_SELECT
|
#ifdef IO_USE_SELECT
|
||||||
ret = io_event_add(fd, what);
|
if (io_masterfd < 0)
|
||||||
|
ret = io_event_add(fd, what);
|
||||||
#endif
|
#endif
|
||||||
if (ret) i->what = what;
|
if (ret) i->what = what;
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -450,7 +469,8 @@ io_event_add(int fd, short what)
|
||||||
#endif
|
#endif
|
||||||
i->what |= what;
|
i->what |= what;
|
||||||
#ifdef IO_USE_EPOLL
|
#ifdef IO_USE_EPOLL
|
||||||
return io_event_change_epoll(fd, i->what, EPOLL_CTL_MOD);
|
if (io_masterfd >= 0)
|
||||||
|
return io_event_change_epoll(fd, i->what, EPOLL_CTL_MOD);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef IO_USE_KQUEUE
|
#ifdef IO_USE_KQUEUE
|
||||||
|
@ -535,6 +555,10 @@ static void
|
||||||
io_close_select(int fd)
|
io_close_select(int fd)
|
||||||
{
|
{
|
||||||
io_event *i;
|
io_event *i;
|
||||||
|
|
||||||
|
if (io_masterfd >= 0) /* Are we using epoll()? */
|
||||||
|
return;
|
||||||
|
|
||||||
FD_CLR(fd, &writers);
|
FD_CLR(fd, &writers);
|
||||||
FD_CLR(fd, &readers);
|
FD_CLR(fd, &readers);
|
||||||
|
|
||||||
|
@ -606,7 +630,8 @@ io_event_del(int fd, short what)
|
||||||
return io_event_change_poll(fd, i->what);
|
return io_event_change_poll(fd, i->what);
|
||||||
#endif
|
#endif
|
||||||
#ifdef IO_USE_EPOLL
|
#ifdef IO_USE_EPOLL
|
||||||
return io_event_change_epoll(fd, i->what, EPOLL_CTL_MOD);
|
if (io_masterfd >= 0)
|
||||||
|
return io_event_change_epoll(fd, i->what, EPOLL_CTL_MOD);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef IO_USE_KQUEUE
|
#ifdef IO_USE_KQUEUE
|
||||||
|
@ -857,6 +882,10 @@ io_dispatch_kqueue(struct timeval *tv)
|
||||||
int
|
int
|
||||||
io_dispatch(struct timeval *tv)
|
io_dispatch(struct timeval *tv)
|
||||||
{
|
{
|
||||||
|
#ifdef IO_USE_EPOLL
|
||||||
|
if (io_masterfd >= 0)
|
||||||
|
return io_dispatch_epoll(tv);
|
||||||
|
#endif
|
||||||
#ifdef IO_USE_SELECT
|
#ifdef IO_USE_SELECT
|
||||||
return io_dispatch_select(tv);
|
return io_dispatch_select(tv);
|
||||||
#endif
|
#endif
|
||||||
|
@ -869,9 +898,6 @@ io_dispatch(struct timeval *tv)
|
||||||
#ifdef IO_USE_POLL
|
#ifdef IO_USE_POLL
|
||||||
return io_dispatch_poll(tv);
|
return io_dispatch_poll(tv);
|
||||||
#endif
|
#endif
|
||||||
#ifdef IO_USE_EPOLL
|
|
||||||
return io_dispatch_epoll(tv);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue