diff --git a/auto/options b/auto/options
index 3064a95..5311af5 100644
--- a/auto/options
+++ b/auto/options
@@ -5,6 +5,7 @@
 OBJS=objs
 
 TEST_BUILD_DEVPOLL=NO
+TEST_BUILD_EPOLL=NO
 
 SELECT=YES
 POLL=YES
@@ -54,6 +55,7 @@
         --with-zlib=*)                   ZLIB="$value"              ;;
 
         --test-build-devpoll)            TEST_BUILD_DEVPOLL=YES     ;;
+        --test-build-epoll)              TEST_BUILD_EPOLL=YES       ;;
 
         *)
             echo "$0: error: invalid option \"$option\""
diff --git a/auto/os/conf b/auto/os/conf
index f0d25b6..add6068 100644
--- a/auto/os/conf
+++ b/auto/os/conf
@@ -44,6 +44,13 @@
 
 
 if [ $TEST_BUILD_DEVPOLL = YES ]; then
+    CFLAGS="$CFLAGS -D HAVE_DEVPOLL=1 -D TEST_BUILD_DEVPOLL=1"
     EVENT_MODULES="$EVENT_MODULES $DEVPOLL_MODULE"
-    EVENT_SRCS="$EVENT_SRCS $DEVPOLL_SRCS"
+    CORE_SRCS="$CORE_SRCS $DEVPOLL_SRCS"
+fi
+
+if [ $TEST_BUILD_EPOLL = YES ]; then
+    CFLAGS="$CFLAGS -D HAVE_EPOLL=1 -D TEST_BUILD_EPOLL=1"
+    EVENT_MODULES="$EVENT_MODULES $EPOLL_MODULE"
+    CORE_SRCS="$CORE_SRCS $EPOLL_SRCS"
 fi
diff --git a/auto/os/linux b/auto/os/linux
index bf5092a..8990e6d 100644
--- a/auto/os/linux
+++ b/auto/os/linux
@@ -7,6 +7,15 @@
 ZLIB_LIB="-lz"
 
 
+NGX_INC="sys/epoll.h"; . auto/inc
+
+if [ $NGX_FOUND=YES ]; then
+    CFLAGS="$CFLAGS -D HAVE_EPOLL=1"
+    EVENT_MODULES="$EVENT_MODULES $EPOLL_MODULE"
+    CORE_SRCS="$CORE_SRCS $EPOLL_SRCS"
+fi
+
+
 # TODO check sendfile64()
 
 CC_TEST_FLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE"
diff --git a/auto/sources b/auto/sources
index b352eff..c83ffa7 100644
--- a/auto/sources
+++ b/auto/sources
@@ -74,6 +74,9 @@
 DEVPOLL_MODULE="ngx_devpoll_module"
 DEVPOLL_SRCS=src/event/modules/ngx_devpoll_module.c
 
+EPOLL_MODULE="ngx_epoll_module"
+EPOLL_SRCS=src/event/modules/ngx_epoll_module.c
+
 IOCP_MODULE="ngx_iocp_module"
 IOCP_SRCS=src/event/modules/ngx_iocp_module.c
 
diff --git a/src/core/ngx_times.c b/src/core/ngx_times.c
index 8a319c7..9326d2b 100644
--- a/src/core/ngx_times.c
+++ b/src/core/ngx_times.c
@@ -37,9 +37,10 @@
     ngx_cached_err_log_time.data = cached_err_log_time;
     ngx_cached_http_time.data = cached_http_time;
     ngx_cached_http_log_time.data = cached_http_log_time;
+    ngx_cached_time = 0;
 
     ngx_gettimeofday(&tv);
-    ngx_cached_time = 0;
+
     ngx_start_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000;
     ngx_old_elapsed_msec = 0;
     ngx_elapsed_msec = 0;
diff --git a/src/core/ngx_times.h b/src/core/ngx_times.h
index 2960042..7823af0 100644
--- a/src/core/ngx_times.h
+++ b/src/core/ngx_times.h
@@ -15,13 +15,24 @@
 
 
 extern time_t            ngx_cached_time;
-extern ngx_epoch_msec_t  ngx_elapsed_msec;
-extern ngx_epoch_msec_t  ngx_old_elapsed_msec;
-extern ngx_epoch_msec_t  ngx_start_msec;
-
 extern ngx_str_t         ngx_cached_err_log_time;
 extern ngx_str_t         ngx_cached_http_time;
 extern ngx_str_t         ngx_cached_http_log_time;
 
+extern ngx_epoch_msec_t  ngx_start_msec;
+
+/*
+ * msecs elapsed since ngx_start_msec in the current event cycle,
+ * used in ngx_event_add_timer() and ngx_event_find_timer()
+ */
+extern ngx_epoch_msec_t  ngx_elapsed_msec;
+
+/*
+ * msecs elapsed since ngx_start_msec in the previous event cycle,
+ * used in ngx_event_expire_timers()
+ */
+extern ngx_epoch_msec_t  ngx_old_elapsed_msec;
+
+
 
 #endif /* _NGX_TIMES_H_INCLUDED_ */
diff --git a/src/event/modules/ngx_devpoll_module.c b/src/event/modules/ngx_devpoll_module.c
index c8217de..d1d8f17 100644
--- a/src/event/modules/ngx_devpoll_module.c
+++ b/src/event/modules/ngx_devpoll_module.c
@@ -106,9 +106,6 @@
 
     dpcf = ngx_event_get_conf(cycle->conf_ctx, ngx_devpoll_module);
 
-ngx_log_debug(cycle->log, "CH: %d" _ dpcf->changes);
-ngx_log_debug(cycle->log, "EV: %d" _ dpcf->events);
-
     if (dp == -1) {
         dp = open("/dev/poll", O_RDWR);
 
@@ -122,7 +119,7 @@
     if (max_changes < dpcf->changes) {
         if (nchanges) {
             n = nchanges * sizeof(struct pollfd);
-            if ((size_t) write(dp, change_list, n) != n) {
+            if (write(dp, change_list, n) != (ssize_t) n) {
                 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
                               "write(/dev/poll) failed");
                 return NGX_ERROR;
@@ -199,8 +196,8 @@
 
 static int ngx_devpoll_add_event(ngx_event_t *ev, int event, u_int flags)
 {
-#if (NGX_DEBUG_EVENT)
-    ngx_connection_t *c = (ngx_connection_t *) ev->data;
+#if (NGX_DEBUG)
+    ngx_connection_t *c;
 #endif
 
 #if (NGX_READ_EVENT != POLLIN)
@@ -213,9 +210,10 @@
     }
 #endif
 
-#if (NGX_DEBUG_EVENT)
-    c = (ngx_connection_t *) ev->data;
-    ngx_log_debug(ev->log, "add event: %d:%d" _ c->fd _ event);
+#if (NGX_DEBUG)
+    c = ev->data;
+    ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
+                   "devpoll add event: fd:%d ev:%04X", c->fd, event);
 #endif
 
     ev->active = 1;
@@ -230,9 +228,8 @@
 
     c = ev->data;
 
-#if (NGX_DEBUG_EVENT)
-    ngx_log_debug(c->log, "del event: %d, %d" _ c->fd _ event);
-#endif
+    ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
+                   "devpoll del event: fd:%d ev:%04X", c->fd, event);
 
     if (ngx_devpoll_set_event(ev, POLLREMOVE, flags) == NGX_ERROR) {
         return NGX_ERROR;
@@ -270,17 +267,15 @@
 
     c = ev->data;
 
-#if (NGX_DEBUG_EVENT)
-    ngx_log_debug(ev->log, "devpoll fd:%d event:%d flush:%d" _
-                           c->fd _ event _ flags);
-#endif
+    ngx_log_debug3(NGX_LOG_DEBUG_EVENT, ev->log, 0,
+                   "devpoll fd:%d ev:%d fl:%d", c->fd, event, flags);
 
     if (nchanges >= max_changes) {
         ngx_log_error(NGX_LOG_WARN, ev->log, 0,
                       "/dev/pool change list is filled up");
 
         n = nchanges * sizeof(struct pollfd);
-        if ((size_t) write(dp, change_list, n) != n) {
+        if (write(dp, change_list, n) != (ssize_t) n) {
             ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_errno,
                           "write(/dev/poll) failed");
             return NGX_ERROR;
@@ -300,7 +295,7 @@
 
     if (flags & NGX_CLOSE_EVENT) {
         n = nchanges * sizeof(struct pollfd);
-        if ((size_t) write(dp, change_list, n) != n) {
+        if (write(dp, change_list, n) != (ssize_t) n) {
             ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_errno,
                           "write(/dev/poll) failed");
             return NGX_ERROR;
@@ -320,29 +315,23 @@
     ngx_msec_t          timer;
     ngx_err_t           err;
     ngx_cycle_t       **cycle;
-    ngx_epoch_msec_t   delta;
     ngx_connection_t   *c;
+    ngx_epoch_msec_t    delta;
     struct dvpoll       dvp;
     struct timeval      tv;
 
     timer = ngx_event_find_timer();
+    ngx_old_elapsed_msec = ngx_elapsed_msec;
 
-    if (timer) {
-        ngx_gettimeofday(&tv);
-        delta = tv.tv_sec * 1000 + tv.tv_usec / 1000;
-
-    } else {
+    if (timer == 0) {
         timer = (ngx_msec_t) INFTIM;
-        delta = 0;
     }
 
-#if (NGX_DEBUG_EVENT)
-    ngx_log_debug(log, "devpoll timer: %d" _ timer);
-#endif
+    ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, "devpoll timer: %d", timer);
 
     if (nchanges) {
         n = nchanges * sizeof(struct pollfd);
-        if ((size_t) write(dp, change_list, n) != n) {
+        if (write(dp, change_list, n) != (ssize_t) n) {
             ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
                           "write(/dev/poll) failed");
             return NGX_ERROR;
@@ -363,34 +352,27 @@
     nchanges = 0;
 
     ngx_gettimeofday(&tv);
+    ngx_time_update(tv.tv_sec);
 
-    if (ngx_cached_time != tv.tv_sec) {
-        ngx_cached_time = tv.tv_sec;
-        ngx_time_update();
-    }
+    delta = ngx_elapsed_msec;
+    ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec;
 
     if ((int) timer != INFTIM) {
-        delta = tv.tv_sec * 1000 + tv.tv_usec / 1000 - delta;
+        delta = ngx_elapsed_msec - delta;
 
-#if (NGX_DEBUG_EVENT)
-        ngx_log_debug(log, "devpoll timer: %d, delta: %d" _ timer _ (int)delta);
-#endif
-        ngx_event_expire_timers((ngx_msec_t) delta);
-
+        ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
+                       "devpoll timer: %d, delta: %d", timer, (int) delta);
     } else {
         if (events == 0) {
             ngx_log_error(NGX_LOG_ALERT, log, 0,
                           "ioctl(DP_POLL) returned no events without timeout");
             return NGX_ERROR;
         }
-
-#if (NGX_DEBUG_EVENT)
-        ngx_log_debug(log, "devpoll timer: %d, delta: %d" _ timer _ (int)delta);
-#endif
     }
 
     if (err) {
-        ngx_log_error(NGX_LOG_ALERT, log, err, "ioctl(DP_POLL) failed");
+        ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT,
+                      log, err, "ioctl(DP_POLL) failed");
         return NGX_ERROR;
     }
 
@@ -411,15 +393,14 @@
         }
 
         if (c->fd == -1) {
-            ngx_log_error(NGX_LOG_ALERT, log, 0, "unkonwn cycle");
+            ngx_log_error(NGX_LOG_EMERG, log, 0, "unknown cycle");
             exit(1);
         }
 
-#if (NGX_DEBUG_EVENT)
-        ngx_log_debug(log, "devpoll: %d: ev:%d rev:%d" _
-                      event_list[i].fd _
-                      event_list[i].events _ event_list[i].revents);
-#endif
+        ngx_log_debug3(NGX_LOG_DEBUG_EVENT, log, 0,
+                       "devpoll: fd:%d, ev:%04X, rev:%04X",
+                       event_list[i].fd,
+                       event_list[i].events, event_list[i].revents);
 
         if (event_list[i].revents & POLLIN) {
             if (!c->read->active) {
@@ -451,6 +432,10 @@
         }
     }
 
+    if (timer != (ngx_msec_t) INFTIM && delta) {
+        ngx_event_expire_timers((ngx_msec_t) delta);
+    }
+
     return NGX_OK;
 }
 
diff --git a/src/event/modules/ngx_devpoll_module.h b/src/event/modules/ngx_devpoll_module.h
deleted file mode 100644
index bd906fd..0000000
--- a/src/event/modules/ngx_devpoll_module.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef _NGX_DEVPOLL_MODULE_H_INCLUDED_
-#define _NGX_DEVPOLL_MODULE_H_INCLUDED_
-
-
-#include <ngx_types.h>
-#include <ngx_log.h>
-#include <ngx_event.h>
-
-int ngx_devpoll_init(int max_connections, ngx_log_t *log);
-int ngx_devpoll_add_event(ngx_event_t *ev, int event, u_int flags);
-int ngx_devpoll_del_event(ngx_event_t *ev, int event, u_int flags);
-void ngx_devpoll_add_timer(ngx_event_t *ev, ngx_msec_t timer);
-int ngx_devpoll_process_events(ngx_log_t *log);
-
-
-#if 0
-/* Solaris */
-
-#define POLLREMOVE   0x0800
-
-#define DP_POLL      0xD001
-
-struct dvpoll {
-    struct pollfd  *dp_fds;
-    int             dp_nfds;
-    int             dp_timeout;
-};
-
-#endif
-
-
-#endif /* _NGX_DEVPOLL_MODULE_H_INCLUDED_ */
diff --git a/src/event/modules/ngx_epoll_module.c b/src/event/modules/ngx_epoll_module.c
new file mode 100644
index 0000000..e8d4a72
--- /dev/null
+++ b/src/event/modules/ngx_epoll_module.c
@@ -0,0 +1,344 @@
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev, http://sysoev.ru/en/
+ */
+
+
+#include <ngx_config.h>
+#include <ngx_core.h>
+#include <ngx_event.h>
+
+
+#if (TEST_BUILD_EPOLL)
+
+/* epoll declarations */
+
+#define EPOLLIN      0x001
+#define EPOLLPRI     0x002
+#define EPOLLOUT     0x004
+#define EPOLLRDNORM  0x040
+#define EPOLLRDBAND  0x080
+#define EPOLLWRNORM  0x100
+#define EPOLLWRBAND  0x200
+#define EPOLLMSG     0x400
+#define EPOLLERR     0x008
+#define EPOLLHUP     0x010
+
+#define EPOLL_CTL_ADD  1
+#define EPOLL_CTL_DEL  2
+#define EPOLL_CTL_MOD  3
+
+typedef union epoll_data {
+    void         *ptr;
+    int           fd;
+    uint32_t      u32;
+    uint64_t      u64;
+} epoll_data_t;
+
+struct epoll_event {
+    uint32_t      events;
+    epoll_data_t  data;
+};
+
+int epoll_create(int size);
+int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
+int epoll_wait(int epfd, struct epoll_event *events, int nevents, int timeout);
+
+int epoll_create(int size)
+{
+    return -1;
+}
+
+int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event)
+{
+    return -1;
+}
+
+int epoll_wait(int epfd, struct epoll_event *events, int nevents, int timeout)
+{
+    return -1;
+}
+
+#endif
+
+
+typedef struct {
+    u_int  events;
+} ngx_epoll_conf_t;
+
+
+static int ngx_epoll_init(ngx_cycle_t *cycle);
+static void ngx_epoll_done(ngx_cycle_t *cycle);
+static int ngx_epoll_add_connection(ngx_connection_t *c);
+static int ngx_epoll_del_connection(ngx_connection_t *c);
+static int ngx_epoll_process_events(ngx_log_t *log);
+
+static void *ngx_epoll_create_conf(ngx_cycle_t *cycle);
+static char *ngx_epoll_init_conf(ngx_cycle_t *cycle, void *conf);
+
+static int                  ep = -1;
+static struct epoll_event  *event_list;
+static u_int                nevents;
+
+
+static ngx_str_t      epoll_name = ngx_string("epoll");
+
+static ngx_command_t  ngx_epoll_commands[] = {
+
+    {ngx_string("epoll_events"),
+     NGX_EVENT_CONF|NGX_CONF_TAKE1,
+     ngx_conf_set_num_slot,
+     0,
+     offsetof(ngx_epoll_conf_t, events),
+     NULL},
+
+    ngx_null_command
+};
+
+
+ngx_event_module_t  ngx_epoll_module_ctx = {
+    &epoll_name,
+    ngx_epoll_create_conf,               /* create configuration */
+    ngx_epoll_init_conf,                 /* init configuration */
+
+    {
+        NULL,                            /* add an event */
+        NULL,                            /* delete an event */
+        NULL,                            /* enable an event */
+        NULL,                            /* disable an event */
+        ngx_epoll_add_connection,        /* add an connection */
+        ngx_epoll_del_connection,        /* delete an connection */
+        ngx_epoll_process_events,        /* process the events */
+        ngx_epoll_init,                  /* init the events */
+        ngx_epoll_done,                  /* done the events */
+    }
+
+};
+
+ngx_module_t  ngx_epoll_module = {
+    NGX_MODULE,
+    &ngx_epoll_module_ctx,               /* module context */
+    ngx_epoll_commands,                  /* module directives */
+    NGX_EVENT_MODULE,                      /* module type */
+    NULL,                                  /* init module */
+    NULL                                   /* init child */
+};
+
+
+static int ngx_epoll_init(ngx_cycle_t *cycle)
+{
+    size_t             n;
+    ngx_epoll_conf_t  *epcf;
+
+    epcf = ngx_event_get_conf(cycle->conf_ctx, ngx_epoll_module);
+
+    if (ep == -1) {
+        ep = epoll_create(/* STUB: open_files / 2 */ 512);
+
+        if (ep == -1) {
+            ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
+                          "epoll_create() failed");
+            return NGX_ERROR;
+        }
+    }
+
+    if (nevents < epcf->events) {
+        if (event_list) {
+            ngx_free(event_list);
+        }
+
+        event_list = ngx_alloc(sizeof(struct epoll_event) * epcf->events,
+                               cycle->log);
+        if (event_list == NULL) {
+            return NGX_ERROR;
+        }
+    }
+
+    nevents = epcf->events;
+
+    ngx_io = ngx_os_io;
+
+    ngx_event_actions = ngx_epoll_module_ctx.actions;
+
+    ngx_event_flags = NGX_USE_EDGE_EVENT;
+
+    return NGX_OK;
+}
+
+
+static void ngx_epoll_done(ngx_cycle_t *cycle)
+{
+    if (close(ep) == -1) {
+        ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
+                      "epoll close() failed");
+    }
+
+    ep = -1;
+
+    ngx_free(event_list);
+
+    event_list = NULL;
+    nevents = 0;
+}
+
+
+static int ngx_epoll_add_connection(ngx_connection_t *c)
+{
+    struct epoll_event  ev;
+
+    ev.events = EPOLLIN|EPOLLOUT;
+    ev.data.ptr = (void *) ((uintptr_t) c | c->read->instance);
+
+    ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0,
+                   "epoll add connection: fd:%d ev:%04X", c->fd, ev.events);
+
+    if (epoll_ctl(ep, EPOLL_CTL_ADD, c->fd, &ev) == -1) {
+        ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
+                      "epoll_ctl(#%d) failed", c->fd);
+        return NGX_ERROR;
+    }
+
+    return NGX_OK;
+}
+
+
+static int ngx_epoll_del_connection(ngx_connection_t *c)
+{
+    c->read->active = 0;
+    c->write->active = 0;
+
+    return NGX_OK;
+}
+
+
+int ngx_epoll_process_events(ngx_log_t *log)
+{
+    int                 events;
+    ngx_int_t           instance, i;
+    size_t              n;
+    ngx_msec_t          timer;
+    ngx_err_t           err;
+    ngx_cycle_t       **cycle;
+    struct timeval      tv;
+    ngx_connection_t   *c;
+    ngx_epoch_msec_t    delta;
+
+
+    timer = ngx_event_find_timer();
+    ngx_old_elapsed_msec = ngx_elapsed_msec;
+
+    if (timer == 0) {
+        timer = (ngx_msec_t) -1;
+    }
+
+    ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, "epoll timer: %d", timer);
+
+    events = epoll_wait(ep, event_list, nevents, timer);
+
+    if (events == -1) {
+        err = ngx_errno;
+    } else {
+        err = 0;
+    }
+
+    ngx_gettimeofday(&tv);
+    ngx_time_update(tv.tv_sec);
+
+    delta = ngx_elapsed_msec;
+    ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec;
+
+    if ((int) timer != INFTIM) {
+        delta = ngx_elapsed_msec - delta;
+
+        ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
+                       "epoll timer: %d, delta: %d", timer, (int) delta);
+    } else {
+        if (events == 0) {
+            ngx_log_error(NGX_LOG_ALERT, log, 0,
+                          "epoll_wait() returned no events without timeout");
+            return NGX_ERROR;
+        }
+    }
+
+    if (err) {
+        ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT,
+                      log, err, "epoll_wait() failed");
+        return NGX_ERROR;
+    }
+
+    for (i = 0; i < events; i++) {
+        c = event_list[i].data.ptr;
+
+        instance = (uintptr_t) c & 1;
+        c = (ngx_connection_t *) ((uintptr_t) c & (uintptr_t) ~1);
+
+        ngx_log_debug3(NGX_LOG_DEBUG_EVENT, log, 0,
+                       "epoll: fd:%d ev:%04X d:" PTR_FMT,
+                       c->fd, event_list[i].events, event_list[i].data);
+
+        if (c->read->instance != instance) {
+
+            /*
+             * it's a stale event from a file descriptor
+             * that was just closed in this iteration
+             */
+
+            ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0,
+                           "epoll: stale event " PTR_FMT, c);
+            continue;
+        }
+
+        if (event_list[i].events & EPOLLIN) {
+            if (!c->read->active) {
+                continue;
+            }
+
+            c->read->ready = 1;
+            c->read->event_handler(c->read);
+        }
+
+        if (event_list[i].events & EPOLLOUT) {
+            if (!c->write->active) {
+                continue;
+            }
+
+            c->write->ready = 1;
+            c->write->event_handler(c->write);
+        }
+
+        if (event_list[i].events & (EPOLLERR|EPOLLHUP|EPOLLMSG)) {
+            ngx_log_error(NGX_LOG_ERR, log, 0,
+                          "epoll_wait() error on fd:%d ev:%d",
+                          c->fd, event_list[i].events);
+        }
+    }
+
+    if (timer != (ngx_msec_t) -1 && delta) {
+        ngx_event_expire_timers((ngx_msec_t) delta);
+    }
+
+    return NGX_OK;
+}
+
+
+static void *ngx_epoll_create_conf(ngx_cycle_t *cycle)
+{
+    ngx_epoll_conf_t  *epcf;
+
+    ngx_test_null(epcf, ngx_palloc(cycle->pool, sizeof(ngx_epoll_conf_t)),
+                  NGX_CONF_ERROR);
+
+    epcf->events = NGX_CONF_UNSET;
+
+    return epcf;
+}
+
+
+static char *ngx_epoll_init_conf(ngx_cycle_t *cycle, void *conf)
+{
+    ngx_epoll_conf_t *epcf = conf;
+
+    ngx_conf_init_unsigned_value(epcf->events, 512);
+
+    return NGX_CONF_OK;
+}
diff --git a/src/event/modules/ngx_kqueue_module.c b/src/event/modules/ngx_kqueue_module.c
index b261e1b..7e1cfa2 100644
--- a/src/event/modules/ngx_kqueue_module.c
+++ b/src/event/modules/ngx_kqueue_module.c
@@ -339,7 +339,8 @@
 
 static int ngx_kqueue_process_events(ngx_log_t *log)
 {
-    ngx_int_t          events, instance, i;
+    int                events;
+    ngx_int_t          instance, i;
     ngx_err_t          err;
     ngx_msec_t         timer;
     ngx_event_t       *ev;
@@ -355,13 +356,7 @@
         ts.tv_nsec = (timer % 1000) * 1000000;
         tp = &ts;
 
-#if 0
-        ngx_gettimeofday(&tv);
-        delta = tv.tv_sec * 1000 + tv.tv_usec / 1000;
-#endif
-
     } else {
-        delta = 0;
         tp = NULL;
     }
 
@@ -378,17 +373,17 @@
     nchanges = 0;
 
     ngx_gettimeofday(&tv);
-
-#if 1
-    delta = ngx_elapsed_msec;
-#endif
-    ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec;
-
     ngx_time_update(tv.tv_sec);
 
+    delta = ngx_elapsed_msec;
+    ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec;
+
     if (timer) {
         delta = ngx_elapsed_msec - delta;
 
+        ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
+                       "kevent timer: %d, delta: %d", timer, (int) delta);
+
     } else {
         if (events == 0) {
             ngx_log_error(NGX_LOG_ALERT, log, 0,
@@ -397,9 +392,6 @@
         }
     }
 
-    ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
-                   "kevent timer: %d, delta: %d", timer, (int) delta);
-
     if (err) {
         ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT,
                       log, err, "kevent() failed");
@@ -496,33 +488,6 @@
 }
 
 
-#if 0
-
-static void ngx_kqueue_thread_handler(ngx_event_t *ev, ngx_log_t *log)
-{
-    ngx_int_t  instance;
-
-    instance = (uintptr_t) ev & 1;
-    ev = (ngx_event_t *) ((uintptr_t) ev & (uintptr_t) ~1);
-
-    if (ev->active && ev->instance == instance) {
-        ev->event_handler(ev);
-        return;
-    }
-
-    /*
-     * it's a stale event from a file descriptor
-     * that was just closed in this iteration
-     */
-
-    ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0,
-                   "kevent: stale event " PTR_FMT, ev);
-
-}
-
-#endif
-
-
 static void *ngx_kqueue_create_conf(ngx_cycle_t *cycle)
 {
     ngx_kqueue_conf_t  *kcf;
diff --git a/src/event/modules/ngx_poll_module.c b/src/event/modules/ngx_poll_module.c
index 7b69de5..5f12eb1 100644
--- a/src/event/modules/ngx_poll_module.c
+++ b/src/event/modules/ngx_poll_module.c
@@ -1,6 +1,6 @@
 
 /*
- * Copyright (C) 2002-2003 Igor Sysoev, http://sysoev.ru
+ * Copyright (C) 2002-2004 Igor Sysoev, http://sysoev.ru/en/
  */
 
 
@@ -146,9 +146,8 @@
 #endif
     }
 
-#if (NGX_DEBUG_EVENT)
-    ngx_log_debug(ev->log, "add event: %d:%d" _ c->fd _ event);
-#endif
+    ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
+                   "poll add event: fd:%d ev:%d", c->fd, event);
 
     if (e == NULL || e->index == NGX_INVALID_INDEX) {
         event_list[nevents].fd = c->fd;
@@ -192,9 +191,8 @@
 #endif
     }
 
-#if (NGX_DEBUG_EVENT)
-    ngx_log_debug(c->log, "del event: %d, %d" _ c->fd _ event);
-#endif
+    ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
+                   "poll del event: fd:%d ev:%d", c->fd, event);
 
     if (e == NULL || e->index == NGX_INVALID_INDEX) {
         if (ev->index < (u_int) --nevents) {
@@ -221,28 +219,24 @@
     ngx_err_t           err;
     ngx_cycle_t       **cycle;
     ngx_event_t        *ev;
-    ngx_epoch_msec_t   delta;
+    ngx_epoch_msec_t    delta;
     ngx_connection_t   *c;
-    struct timeval     tv;
+    struct timeval      tv;
 
     timer = ngx_event_find_timer();
+    ngx_old_elapsed_msec = ngx_elapsed_msec; 
 
-    if (timer) {
-        ngx_gettimeofday(&tv);
-        delta = tv.tv_sec * 1000 + tv.tv_usec / 1000;
-
-    } else {
+    if (timer == 0) {
         timer = (ngx_msec_t) INFTIM;
-        delta = 0;
     }
 
-#if (NGX_DEBUG_EVENT)
+#if (NGX_DEBUG)
     for (i = 0; i < nevents; i++) {
-        ngx_log_debug(log, "poll: %d, %d" _
-                      event_list[i].fd _ event_list[i].events);
+        ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0, "poll: fd:%d ev:%04X",
+                       event_list[i].fd, event_list[i].events);
     }
 
-    ngx_log_debug(log, "poll timer: %d" _ timer);
+    ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, "poll timer: %d", timer);
 #endif
 
     ready = poll(event_list, (u_int) nevents, (int) timer);
@@ -253,33 +247,30 @@
         err = 0;
     }
 
-    ngx_log_debug(log, "poll ready %d" _ ready);
+    ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, "poll ready %d", ready);
 
     ngx_gettimeofday(&tv);
     ngx_time_update(tv.tv_sec);
 
+    delta = ngx_elapsed_msec;
+    ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec;
+
     if ((int) timer != INFTIM) {
-        delta = tv.tv_sec * 1000 + tv.tv_usec / 1000 - delta;
+        delta = ngx_elapsed_msec - delta;
 
-#if (NGX_DEBUG_EVENT)
-        ngx_log_debug(log, "poll timer: %d, delta: %d" _ timer _ (int) delta);
-#endif
-        ngx_event_expire_timers((ngx_msec_t) delta);
-
+        ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
+                       "poll timer: %d, delta: %d", timer, (int) delta);
     } else {
         if (ready == 0) {
             ngx_log_error(NGX_LOG_ALERT, log, 0,
                           "poll() returned no events without timeout");
             return NGX_ERROR;
         }
-
-#if (NGX_DEBUG_EVENT)
-        ngx_log_debug(log, "poll timer: %d, delta: %d" _ timer _ (int) delta);
-#endif
     }
 
     if (err) {
-        ngx_log_error(NGX_LOG_ALERT, log, err, "poll() failed");
+        ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT,
+                      log, err, "poll() failed");
         return NGX_ERROR;
     }
 
@@ -306,11 +297,10 @@
             exit(1);
         }
 
-#if (NGX_DEBUG_EVENT)
-        ngx_log_debug(log, "poll: fd:%d, ev:%d, rev:%d" _
-                      event_list[i].fd _
-                      event_list[i].events _ event_list[i].revents);
-#endif
+        ngx_log_debug3(NGX_LOG_DEBUG_EVENT, log, 0,
+                       "poll: fd:%d ev:%04X rev:%04X",
+                       event_list[i].fd,
+                       event_list[i].events, event_list[i].revents);
 
         found = 0;
 
@@ -343,7 +333,7 @@
 
         if (event_list[i].revents & (POLLERR|POLLHUP)) {
             ngx_log_error(NGX_LOG_ALERT, log, 0,
-                          "strange poll() error on %d:%d:%d",
+                          "strange poll() error on fd:%d ev:%04X rev:%04X",
                           event_list[i].fd,
                           event_list[i].events, event_list[i].revents);
         }
@@ -377,5 +367,9 @@
         ngx_log_error(NGX_LOG_ALERT, log, 0, "poll ready != events");
     }
 
+    if (timer != (ngx_msec_t) INFTIM && delta) {
+        ngx_event_expire_timers((ngx_msec_t) delta);
+    }
+
     return NGX_OK;
 }
diff --git a/src/event/modules/ngx_poll_module.h b/src/event/modules/ngx_poll_module.h
deleted file mode 100644
index b9fcec2..0000000
--- a/src/event/modules/ngx_poll_module.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef _NGX_POLL_MODULE_H_INCLUDED_
-#define _NGX_POLL_MODULE_H_INCLUDED_
-
-
-#include <ngx_types.h>
-#include <ngx_log.h>
-#include <ngx_event.h>
-
-int ngx_poll_init(int max_connections, ngx_log_t *log);
-int ngx_poll_add_event(ngx_event_t *ev, int event, u_int flags);
-int ngx_poll_del_event(ngx_event_t *ev, int event, u_int flags);
-void ngx_poll_add_timer(ngx_event_t *ev, ngx_msec_t timer);
-int ngx_poll_process_events(ngx_log_t *log);
-
-
-#endif /* _NGX_POLL_MODULE_H_INCLUDED_ */
diff --git a/src/event/modules/ngx_select_module.c b/src/event/modules/ngx_select_module.c
index 66783e7..18d1bde 100644
--- a/src/event/modules/ngx_select_module.c
+++ b/src/event/modules/ngx_select_module.c
@@ -131,9 +131,8 @@
 
     c = ev->data;
 
-#if (NGX_DEBUG_EVENT)
-    ngx_log_debug(ev->log, "select fd:%d event:%d" _ c->fd _ event);
-#endif
+    ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
+                   "select add event fd:%d ev:%d", c->fd, event);
 
     if (ev->index != NGX_INVALID_INDEX) {
         ngx_log_error(NGX_LOG_ALERT, ev->log, 0,
@@ -197,9 +196,8 @@
         return NGX_OK;
     }
 
-#if (NGX_DEBUG_EVENT)
-    ngx_log_debug(c->log, "del event: %d, %d" _ c->fd _ event);
-#endif
+    ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
+                   "select del event fd:%d ev:%d", c->fd, event);
 
 #if (WIN32)
 
@@ -259,19 +257,11 @@
     ngx_old_elapsed_msec = ngx_elapsed_msec;
 
     if (timer) {
-#if (HAVE_SELECT_CHANGE_TIMEOUT)
-        delta = 0;
-#else
-        ngx_gettimeofday(&tv);
-        delta = tv.tv_sec * 1000 + tv.tv_usec / 1000;
-#endif
-
         tv.tv_sec = timer / 1000;
         tv.tv_usec = (timer % 1000) * 1000;
         tp = &tv;
 
     } else {
-        delta = 0;
         tp = NULL;
     }
 
@@ -284,22 +274,22 @@
             }
         }
 
-#if (NGX_DEBUG_EVENT)
-        ngx_log_debug(log, "change max_fd: %d" _ max_fd);
-#endif
+        ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0,
+                       "change max_fd: %d", max_fd);
     }
 #endif
 
-#if (NGX_DEBUG_EVENT)
+#if (NGX_DEBUG)
     for (i = 0; i < nevents; i++) {
         ev = event_index[i];
         c = (ngx_connection_t *) ev->data;
-        ngx_log_debug(log, "select: %d:%d" _ c->fd _ ev->write);
+        ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
+                       "select event: fd:%d wr:%d", c->fd,ev->write);
     }
-
-    ngx_log_debug(log, "select timer: %d" _ timer);
 #endif
 
+    ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, "select timer: %d", timer);
+
 #if (WIN32)
     ready = select(0, &work_read_fd_set, &work_write_fd_set, NULL, tp);
 #else
@@ -312,10 +302,6 @@
         err = 0;
     }
 
-#if (NGX_DEBUG_EVENT)
-    ngx_log_debug(log, "select ready %d" _ ready);
-#endif
-
 #if (HAVE_SELECT_CHANGE_TIMEOUT)
 
     if (timer) {
@@ -330,51 +316,36 @@
         if (deltas > 1000) {
             ngx_gettimeofday(&tv);
             deltas = tv.tv_usec / 1000;
-
-            if (ngx_cached_time != tv.tv_sec) {
-                ngx_cached_time = tv.tv_sec;
-                ngx_time_update();
-            }
+            ngx_time_update(tv.tv_sec);
         }
 
-#if (NGX_DEBUG_EVENT)
-        ngx_log_debug(log, "select timer: %d, delta: %d" _ timer _ (int) delta);
-#endif
-
-        ngx_event_expire_timers((ngx_msec_t) delta);
+        ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
+                       "select timer: %d, delta: %d", timer, (int) delta);
 
     } else {
         ngx_gettimeofday(&tv);
-
-        if (ngx_cached_time != tv.tv_sec) {
-            ngx_cached_time = tv.tv_sec;
-            ngx_time_update();
-        }
+        ngx_time_update(tv.tv_sec);
 
         if (ready == 0) {
             ngx_log_error(NGX_LOG_ALERT, log, 0,
                           "select() returned no events without timeout");
             return NGX_ERROR;
         }
-
-#if (NGX_DEBUG_EVENT)
-        ngx_log_debug(log, "select timer: %d, delta: %d" _ timer _ (int) delta);
-#endif
     }
 
-#else /* HAVE_SELECT_CHANGE_TIMEOUT */
+#else /* !(HAVE_SELECT_CHANGE_TIMEOUT) */
 
     ngx_gettimeofday(&tv);
     ngx_time_update(tv.tv_sec);
 
+    delta = ngx_elapsed_msec;
+    ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec;
+
     if (timer) {
-        delta = tv.tv_sec * 1000 + tv.tv_usec / 1000 - delta;
+        delta = ngx_elapsed_msec - delta;
 
-#if (NGX_DEBUG_EVENT)
-        ngx_log_debug(log, "select timer: %d, delta: %d" _ timer _ (int) delta);
-#endif
-
-        ngx_event_expire_timers((ngx_msec_t) delta);
+        ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
+                       "select timer: %d, delta: %d", timer, (int) delta);
 
     } else {
         if (ready == 0) {
@@ -382,16 +353,15 @@
                           "select() returned no events without timeout");
             return NGX_ERROR;
         }
-
-#if (NGX_DEBUG_EVENT)
-        ngx_log_debug(log, "select timer: %d, delta: %d" _ timer _ (int) delta);
-#endif
     }
 
 #endif /* HAVE_SELECT_CHANGE_TIMEOUT */
 
+    ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, "select ready %d", ready);
+
     if (err) {
-        ngx_log_error(NGX_LOG_ALERT, log, err, "select() failed");
+        ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT,
+                      log, err, "select() failed");
         return NGX_ERROR;
     }
 
@@ -405,17 +375,15 @@
         if (ev->write) {
             if (FD_ISSET(c->fd, &work_write_fd_set)) {
                 found = 1;
-#if (NGX_DEBUG_EVENT)
-                ngx_log_debug(log, "select write %d" _ c->fd);
-#endif
+                ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0,
+                               "select write %d", c->fd);
             }
 
         } else {
             if (FD_ISSET(c->fd, &work_read_fd_set)) {
                 found = 1;
-#if (NGX_DEBUG_EVENT)
-                ngx_log_debug(log, "select read %d" _ c->fd);
-#endif
+                ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0,
+                               "select read %d", c->fd);
             }
         }
 
@@ -453,6 +421,10 @@
         ngx_log_error(NGX_LOG_ALERT, log, 0, "select ready != events");
     }
 
+    if (timer && delta) {
+        ngx_event_expire_timers((ngx_msec_t) delta);
+    }
+
     return NGX_OK;
 }
 
diff --git a/src/event/modules/ngx_select_module.h b/src/event/modules/ngx_select_module.h
deleted file mode 100644
index 143a2cb..0000000
--- a/src/event/modules/ngx_select_module.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef _NGX_SELECT_MODULE_H_INCLUDED_
-#define _NGX_SELECT_MODULE_H_INCLUDED_
-
-
-#include <ngx_types.h>
-#include <ngx_log.h>
-#include <ngx_event.h>
-
-int ngx_select_init(int max_connections, ngx_log_t *log);
-int ngx_select_add_event(ngx_event_t *ev, int event, u_int flags);
-int ngx_select_del_event(ngx_event_t *ev, int event, u_int flags);
-void ngx_select_add_timer(ngx_event_t *ev, ngx_msec_t timer);
-int ngx_select_process_events(ngx_log_t *log);
-
-
-#endif /* _NGX_SELECT_MODULE_H_INCLUDED_ */
diff --git a/src/event/ngx_event.c b/src/event/ngx_event.c
index fada461..bf66346 100644
--- a/src/event/ngx_event.c
+++ b/src/event/ngx_event.c
@@ -134,7 +134,8 @@
         if (ngx_modules[m]->ctx_index == ecf->use) {
             module = ngx_modules[m]->ctx;
             if (module->actions.init(cycle) == NGX_ERROR) {
-                return NGX_ERROR;
+                /* fatal */
+                exit(2);
             }
             break;
         }
diff --git a/src/event/ngx_event_accept.c b/src/event/ngx_event_accept.c
index 1c10662..75701cb 100644
--- a/src/event/ngx_event_accept.c
+++ b/src/event/ngx_event_accept.c
@@ -192,6 +192,10 @@
             rev->ready = 1;
         }
 
+        if (ev->deferred_accept) {
+            rev->ready = 1;
+        }
+
         c->ctx = ls->ctx;
         c->servers = ls->servers;
 
@@ -215,10 +219,6 @@
         ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
                        "accept: %d, %d", s, c->number);
 
-        if (ev->deferred_accept) {
-            rev->ready = 1;
-        }
-
         if (ngx_add_conn) {
             if (ngx_add_conn(c) == NGX_ERROR) {
                 if (ngx_close_socket(s) == -1) {
