]> git.kaiwu.me - nginx.git/commitdiff
handle Winsock select() WSAEINVAL
authorIgor Sysoev <igor@sysoev.ru>
Wed, 29 Apr 2009 13:42:14 +0000 (13:42 +0000)
committerIgor Sysoev <igor@sysoev.ru>
Wed, 29 Apr 2009 13:42:14 +0000 (13:42 +0000)
src/event/modules/ngx_select_module.c

index a50088ba45296305c6921d5e400575141887dd61..f7020809c04f741c2108bdc2821ca4a259ddb52b 100644 (file)
@@ -314,7 +314,21 @@ ngx_select_process_events(ngx_cycle_t *cycle, ngx_msec_t timer,
 
 #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