changeset 2777:7615a6c5fb54

handle Winsock select() WSAEINVAL
author Igor Sysoev <igor@sysoev.ru>
date Wed, 29 Apr 2009 13:42:14 +0000
parents 88987e52be42
children ae3cba0dbee3
files src/event/modules/ngx_select_module.c
diffstat 1 files changed, 15 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/event/modules/ngx_select_module.c
+++ b/src/event/modules/ngx_select_module.c
@@ -314,7 +314,21 @@ ngx_select_process_events(ngx_cycle_t *c
 
 #if (NGX_WIN32)
 
-    ready = select(0, &work_read_fd_set, &work_write_fd_set, NULL, tp);
+    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