summaryrefslogtreecommitdiffhomepage
path: root/src/event/ngx_event.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/event/ngx_event.h100
1 files changed, 100 insertions, 0 deletions
diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h
index 029d185f5..8bb2017bd 100644
--- a/src/event/ngx_event.h
+++ b/src/event/ngx_event.h
@@ -379,6 +379,106 @@ void ngx_worker(ngx_cycle_t *cycle);
#include <ngx_iocp_module.h>
#endif
+
+
+ngx_inline static int ngx_handle_read_event(ngx_event_t *rev)
+{
+ if (ngx_event_flags & (NGX_HAVE_AIO_EVENT|NGX_HAVE_EDGE_EVENT)) {
+
+ /* aio, iocp, epoll */
+
+ return NGX_OK;
+ }
+
+ if (ngx_event_flags & NGX_HAVE_CLEAR_EVENT) {
+
+ /* kqueue */
+
+ if (!rev->active && !rev->ready) {
+ if (ngx_add_event(rev, NGX_READ_EVENT, NGX_CLEAR_EVENT)
+ == NGX_ERROR) {
+ return NGX_ERROR;
+ }
+ }
+
+ return NGX_OK;
+ }
+
+ /* select, poll, /dev/poll */
+
+ if (!rev->active && !rev->ready) {
+ if (ngx_add_event(rev, NGX_READ_EVENT, NGX_LEVEL_EVENT) == NGX_ERROR) {
+ return NGX_ERROR;
+ }
+
+ return NGX_OK;
+ }
+
+ if (rev->active && rev->ready) {
+ if (ngx_del_event(rev, NGX_READ_EVENT, 0) == NGX_ERROR) {
+ return NGX_ERROR;
+ }
+
+ return NGX_OK;
+ }
+
+ return NGX_OK;
+}
+
+
+ngx_inline static int ngx_handle_write_event(ngx_event_t *wev, int lowat)
+{
+ if (ngx_event_flags & (NGX_HAVE_AIO_EVENT|NGX_HAVE_EDGE_EVENT)) {
+
+ /* aio, iocp, epoll */
+
+ return NGX_OK;
+ }
+
+ if (ngx_event_flags & NGX_HAVE_CLEAR_EVENT) {
+
+ /* kqueue */
+
+#if (HAVE_LOWAT_EVENT) /* kqueue's NOTE_LOWAT */
+
+ if (ngx_event_flags & NGX_HAVE_LOWAT_EVENT) {
+ wev->lowat = lowat;
+ }
+
+#endif
+ if (!wev->active && !wev->ready) {
+ if (ngx_add_event(wev, NGX_WRITE_EVENT, NGX_CLEAR_EVENT)
+ == NGX_ERROR) {
+ return NGX_ERROR;
+ }
+ }
+
+ return NGX_OK;
+ }
+
+ /* select, poll, /dev/poll */
+
+ if (!wev->active && !wev->ready) {
+ if (ngx_add_event(wev, NGX_WRITE_EVENT, NGX_LEVEL_EVENT) == NGX_ERROR) {
+ return NGX_ERROR;
+ }
+
+ return NGX_OK;
+ }
+
+ if (wev->active && wev->ready) {
+ if (ngx_del_event(wev, NGX_WRITE_EVENT, 0) == NGX_ERROR) {
+ return NGX_ERROR;
+ }
+
+ return NGX_OK;
+ }
+
+ return NGX_OK;
+}
+
+
+
/* ***************************** */