comparison src/event/modules/ngx_select_module.c @ 2777:7615a6c5fb54

handle Winsock select() WSAEINVAL
author Igor Sysoev <igor@sysoev.ru>
date Wed, 29 Apr 2009 13:42:14 +0000
parents 90312b616162
children ae3cba0dbee3
comparison
equal deleted inserted replaced
2776:88987e52be42 2777:7615a6c5fb54
312 *(int *) (void *) &work_read_fd_set); 312 *(int *) (void *) &work_read_fd_set);
313 #endif 313 #endif
314 314
315 #if (NGX_WIN32) 315 #if (NGX_WIN32)
316 316
317 ready = select(0, &work_read_fd_set, &work_write_fd_set, NULL, tp); 317 if (max_read || max_write) {
318 ready = select(0, &work_read_fd_set, &work_write_fd_set, NULL, tp);
319
320 } else {
321
322 /*
323 * Winsock select() requires that at least one descriptor set must be
324 * be non-null, and any non-null descriptor set must contain at least
325 * one handle to a socket. Otherwise select() returns WSAEINVAL.
326 */
327
328 ngx_msleep(timer);
329
330 ready = 0;
331 }
318 332
319 #else 333 #else
320 334
321 ready = select(max_fd + 1, &work_read_fd_set, &work_write_fd_set, NULL, tp); 335 ready = select(max_fd + 1, &work_read_fd_set, &work_write_fd_set, NULL, tp);
322 336