diff src/event/modules/ngx_win32_select_module.c @ 2813:c00763aa5e1b

divide select module into two modules: Unix and Win32 ones
author Igor Sysoev <igor@sysoev.ru>
date Wed, 06 May 2009 14:53:54 +0000
parents src/event/modules/ngx_select_module.c@be08552a64bf
children a66d6dfd53f1 e1409e56ba7c
line wrap: on
line diff
copy from src/event/modules/ngx_select_module.c
copy to src/event/modules/ngx_win32_select_module.c
--- a/src/event/modules/ngx_select_module.c
+++ b/src/event/modules/ngx_win32_select_module.c
@@ -9,7 +9,6 @@
 #include <ngx_event.h>
 
 
-
 static ngx_int_t ngx_select_init(ngx_cycle_t *cycle, ngx_msec_t timer);
 static void ngx_select_done(ngx_cycle_t *cycle);
 static ngx_int_t ngx_select_add_event(ngx_event_t *ev, ngx_int_t event,
@@ -27,13 +26,8 @@ static fd_set         master_write_fd_se
 static fd_set         work_read_fd_set;
 static fd_set         work_write_fd_set;
 
-#if (NGX_WIN32)
 static ngx_uint_t     max_read;
 static ngx_uint_t     max_write;
-#else
-static ngx_int_t      max_fd;
-#endif
-
 static ngx_uint_t     nevents;
 
 static ngx_event_t  **event_index;
@@ -112,11 +106,8 @@ ngx_select_init(ngx_cycle_t *cycle, ngx_
 
     ngx_event_flags = NGX_USE_LEVEL_EVENT;
 
-#if (NGX_WIN32)
-    max_read = max_write = 0;
-#else
-    max_fd = -1;
-#endif
+    max_read = 0;
+    max_write = 0;
 
     return NGX_OK;
 }
@@ -156,9 +147,6 @@ ngx_select_add_event(ngx_event_t *ev, ng
         return NGX_ERROR;
     }
 
-
-#if (NGX_WIN32)
-
     if ((event == NGX_READ_EVENT) && (max_read >= FD_SETSIZE)
         || (event == NGX_WRITE_EVENT) && (max_write >= FD_SETSIZE))
     {
@@ -177,21 +165,6 @@ ngx_select_add_event(ngx_event_t *ev, ng
         max_write++;
     }
 
-#else
-
-    if (event == NGX_READ_EVENT) {
-        FD_SET(c->fd, &master_read_fd_set);
-
-    } else if (event == NGX_WRITE_EVENT) {
-        FD_SET(c->fd, &master_write_fd_set);
-    }
-
-    if (max_fd != -1 && max_fd < c->fd) {
-        max_fd = c->fd;
-    }
-
-#endif
-
     ev->active = 1;
 
     event_index[nevents] = ev;
@@ -219,8 +192,6 @@ ngx_select_del_event(ngx_event_t *ev, ng
     ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
                    "select del event fd:%d ev:%i", c->fd, event);
 
-#if (NGX_WIN32)
-
     if (event == NGX_READ_EVENT) {
         FD_CLR(c->fd, &master_read_fd_set);
         max_read--;
@@ -230,21 +201,6 @@ ngx_select_del_event(ngx_event_t *ev, ng
         max_write--;
     }
 
-#else
-
-    if (event == NGX_READ_EVENT) {
-        FD_CLR(c->fd, &master_read_fd_set);
-
-    } else if (event == NGX_WRITE_EVENT) {
-        FD_CLR(c->fd, &master_write_fd_set);
-    }
-
-    if (max_fd == c->fd) {
-        max_fd = -1;
-    }
-
-#endif
-
     if (ev->index < --nevents) {
         e = event_index[nevents];
         event_index[ev->index] = e;
@@ -268,22 +224,6 @@ ngx_select_process_events(ngx_cycle_t *c
     struct timeval     tv, *tp;
     ngx_connection_t  *c;
 
-#if !(NGX_WIN32)
-
-    if (max_fd == -1) {
-        for (i = 0; i < nevents; i++) {
-            c = event_index[i]->data;
-            if (max_fd < c->fd) {
-                max_fd = c->fd;
-            }
-        }
-
-        ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
-                       "change max_fd: %d", max_fd);
-    }
-
-#endif
-
 #if (NGX_DEBUG)
     if (cycle->log->log_level & NGX_LOG_DEBUG_ALL) {
         for (i = 0; i < nevents; i++) {
@@ -292,11 +232,6 @@ ngx_select_process_events(ngx_cycle_t *c
             ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
                            "select event: fd:%d wr:%d", c->fd, ev->write);
         }
-
-#if !(NGX_WIN32)
-        ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
-                       "max_fd: %d", max_fd);
-#endif
     }
 #endif
 
@@ -315,8 +250,6 @@ ngx_select_process_events(ngx_cycle_t *c
     work_read_fd_set = master_read_fd_set;
     work_write_fd_set = master_write_fd_set;
 
-#if (NGX_WIN32)
-
     if (max_read || max_write) {
         ready = select(0, &work_read_fd_set, &work_write_fd_set, NULL, tp);
 
@@ -333,12 +266,6 @@ ngx_select_process_events(ngx_cycle_t *c
         ready = 0;
     }
 
-#else
-
-    ready = select(max_fd + 1, &work_read_fd_set, &work_write_fd_set, NULL, tp);
-
-#endif
-
     if (ready == -1) {
         err = ngx_socket_errno;
     } else {
@@ -352,8 +279,6 @@ ngx_select_process_events(ngx_cycle_t *c
     ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
                    "select ready %d", ready);
 
-#if (NGX_WIN32)
-
     if (err) {
         ngx_log_error(NGX_LOG_ALERT, cycle->log, err, "select() failed");
 
@@ -364,35 +289,6 @@ ngx_select_process_events(ngx_cycle_t *c
         return NGX_ERROR;
     }
 
-#else
-
-    if (err) {
-        ngx_uint_t  level;
-
-        if (err == NGX_EINTR) {
-
-            if (ngx_event_timer_alarm) {
-                ngx_event_timer_alarm = 0;
-                return NGX_OK;
-            }
-
-            level = NGX_LOG_INFO;
-
-        } else {
-            level = NGX_LOG_ALERT;
-        }
-
-        ngx_log_error(level, cycle->log, err, "select() failed");
-
-        if (err == EBADF) {
-            ngx_select_repair_fd_sets(cycle);
-        }
-
-        return NGX_ERROR;
-    }
-
-#endif
-
     if (ready == 0) {
         if (timer != NGX_TIMER_INFINITE) {
             return NGX_OK;
@@ -455,13 +351,11 @@ static void
 ngx_select_repair_fd_sets(ngx_cycle_t *cycle)
 {
     int           n;
+    u_int         i;
     socklen_t     len;
     ngx_err_t     err;
     ngx_socket_t  s;
 
-#if (NGX_WIN32)
-    u_int         i;
-
     for (i = 0; i < master_read_fd_set.fd_count; i++) {
 
         s = master_read_fd_set.fd_array[i];
@@ -491,48 +385,6 @@ ngx_select_repair_fd_sets(ngx_cycle_t *c
             FD_CLR(s, &master_write_fd_set);
         }
     }
-
-#else
-
-    for (s = 0; s <= max_fd; s++) {
-
-        if (FD_ISSET(s, &master_read_fd_set) == 0) {
-            continue;
-        }
-
-        len = sizeof(int);
-
-        if (getsockopt(s, SOL_SOCKET, SO_TYPE, &n, &len) == -1) {
-            err = ngx_socket_errno;
-
-            ngx_log_error(NGX_LOG_ALERT, cycle->log, err,
-                          "invalid descriptor #%d in read fd_set", s);
-
-            FD_CLR(s, &master_read_fd_set);
-        }
-    }
-
-    for (s = 0; s <= max_fd; s++) {
-
-        if (FD_ISSET(s, &master_write_fd_set) == 0) {
-            continue;
-        }
-
-        len = sizeof(int);
-
-        if (getsockopt(s, SOL_SOCKET, SO_TYPE, &n, &len) == -1) {
-            err = ngx_socket_errno;
-
-            ngx_log_error(NGX_LOG_ALERT, cycle->log, err,
-                          "invalid descriptor #%d in write fd_set", s);
-
-            FD_CLR(s, &master_write_fd_set);
-        }
-    }
-
-    max_fd = -1;
-
-#endif
 }
 
 
@@ -547,28 +399,5 @@ ngx_select_init_conf(ngx_cycle_t *cycle,
         return NGX_CONF_OK;
     }
 
-    /* disable warning: the default FD_SETSIZE is 1024U in FreeBSD 5.x */
-
-#if !(NGX_WIN32)
-
-    if (cycle->connection_n > FD_SETSIZE) {
-        ngx_log_error(NGX_LOG_EMERG, cycle->log, 0,
-                      "the maximum number of files "
-                      "supported by select() is %ud", FD_SETSIZE);
-        return NGX_CONF_ERROR;
-    }
-
-#endif
-
-#if (NGX_THREADS) && !(NGX_WIN32)
-
-    ngx_log_error(NGX_LOG_EMERG, cycle->log, 0,
-                  "select() is not supported in the threaded mode");
-    return NGX_CONF_ERROR;
-
-#else
-
     return NGX_CONF_OK;
-
-#endif
 }