diff src/event/modules/ngx_select_module.c @ 488:829f9a66a659 NGINX_0_7_56

nginx 0.7.56 *) Feature: nginx/Windows supports IPv6 in a "listen" directive of the HTTP module. *) Bugfix: in ngx_http_image_filter_module.
author Igor Sysoev <http://sysoev.ru>
date Mon, 11 May 2009 00:00:00 +0400
parents 6484cbba0222
children 86dad910eeb6
line wrap: on
line diff
--- a/src/event/modules/ngx_select_module.c
+++ b/src/event/modules/ngx_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,7 @@ 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 +105,7 @@ 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
 
     return NGX_OK;
 }
@@ -156,29 +145,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))
-    {
-        ngx_log_error(NGX_LOG_ERR, ev->log, 0,
-                      "maximum number of descriptors "
-                      "supported by select() is %d", FD_SETSIZE);
-        return NGX_ERROR;
-    }
-
-    if (event == NGX_READ_EVENT) {
-        FD_SET(c->fd, &master_read_fd_set);
-        max_read++;
-
-    } else if (event == NGX_WRITE_EVENT) {
-        FD_SET(c->fd, &master_write_fd_set);
-        max_write++;
-    }
-
-#else
-
     if (event == NGX_READ_EVENT) {
         FD_SET(c->fd, &master_read_fd_set);
 
@@ -190,8 +156,6 @@ ngx_select_add_event(ngx_event_t *ev, ng
         max_fd = c->fd;
     }
 
-#endif
-
     ev->active = 1;
 
     event_index[nevents] = ev;
@@ -219,19 +183,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--;
-
-    } else if (event == NGX_WRITE_EVENT) {
-        FD_CLR(c->fd, &master_write_fd_set);
-        max_write--;
-    }
-
-#else
-
     if (event == NGX_READ_EVENT) {
         FD_CLR(c->fd, &master_read_fd_set);
 
@@ -243,8 +194,6 @@ ngx_select_del_event(ngx_event_t *ev, ng
         max_fd = -1;
     }
 
-#endif
-
     if (ev->index < --nevents) {
         e = event_index[nevents];
         event_index[ev->index] = e;
@@ -268,8 +217,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;
@@ -282,8 +229,6 @@ ngx_select_process_events(ngx_cycle_t *c
                        "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++) {
@@ -293,10 +238,8 @@ ngx_select_process_events(ngx_cycle_t *c
                            "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,30 +258,8 @@ 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);
-
-    } else {
-
-        /*
-         * Winsock select() requires that at least one descriptor set must be
-         * be non-null, and any non-null descriptor set must contain at least
-         * one handle to a socket.  Otherwise select() returns WSAEINVAL.
-         */
-
-        ngx_msleep(timer);
-
-        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,20 +273,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");
-
-        if (err == WSAENOTSOCK) {
-            ngx_select_repair_fd_sets(cycle);
-        }
-
-        return NGX_ERROR;
-    }
-
-#else
-
     if (err) {
         ngx_uint_t  level;
 
@@ -391,8 +298,6 @@ ngx_select_process_events(ngx_cycle_t *c
         return NGX_ERROR;
     }
 
-#endif
-
     if (ready == 0) {
         if (timer != NGX_TIMER_INFINITE) {
             return NGX_OK;
@@ -459,41 +364,6 @@ ngx_select_repair_fd_sets(ngx_cycle_t *c
     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];
-        len = sizeof(int);
-
-        if (getsockopt(s, SOL_SOCKET, SO_TYPE, (char *) &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 (i = 0; i < master_write_fd_set.fd_count; i++) {
-
-        s = master_write_fd_set.fd_array[i];
-        len = sizeof(int);
-
-        if (getsockopt(s, SOL_SOCKET, SO_TYPE, (char *) &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);
-        }
-    }
-
-#else
-
     for (s = 0; s <= max_fd; s++) {
 
         if (FD_ISSET(s, &master_read_fd_set) == 0) {
@@ -531,8 +401,6 @@ ngx_select_repair_fd_sets(ngx_cycle_t *c
     }
 
     max_fd = -1;
-
-#endif
 }
 
 
@@ -549,8 +417,6 @@ ngx_select_init_conf(ngx_cycle_t *cycle,
 
     /* 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 "
@@ -558,9 +424,7 @@ ngx_select_init_conf(ngx_cycle_t *cycle,
         return NGX_CONF_ERROR;
     }
 
-#endif
-
-#if (NGX_THREADS) && !(NGX_WIN32)
+#if (NGX_THREADS)
 
     ngx_log_error(NGX_LOG_EMERG, cycle->log, 0,
                   "select() is not supported in the threaded mode");