Mercurial > hg > nginx-ranges
diff src/event/modules/ngx_select_module.c @ 497: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");