comparison src/event/modules/ngx_select_module.c @ 179:9f3a78b06c48

nginx-0.0.1-2003-11-11-21:13:43 import
author Igor Sysoev <igor@sysoev.ru>
date Tue, 11 Nov 2003 18:13:43 +0000
parents a8ff48d26cca
children c1f3a3c7c5db
comparison
equal deleted inserted replaced
178:a8ff48d26cca 179:9f3a78b06c48
146 "%d:%d is already set", c->fd, event); 146 "%d:%d is already set", c->fd, event);
147 return NGX_OK; 147 return NGX_OK;
148 } 148 }
149 149
150 #if (WIN32) 150 #if (WIN32)
151
151 if ((event == NGX_READ_EVENT) && (max_read >= FD_SETSIZE) 152 if ((event == NGX_READ_EVENT) && (max_read >= FD_SETSIZE)
152 || (event == NGX_WRITE_EVENT) && (max_write >= FD_SETSIZE)) 153 || (event == NGX_WRITE_EVENT) && (max_write >= FD_SETSIZE))
153 { 154 {
154 ngx_log_error(NGX_LOG_ERR, ev->log, 0, 155 ngx_log_error(NGX_LOG_ERR, ev->log, 0,
155 "maximum number of descriptors " 156 "maximum number of descriptors "
163 164
164 } else if (event == NGX_WRITE_EVENT) { 165 } else if (event == NGX_WRITE_EVENT) {
165 FD_SET(c->fd, &master_write_fd_set); 166 FD_SET(c->fd, &master_write_fd_set);
166 max_write++; 167 max_write++;
167 } 168 }
168 #else 169
170 #else
171
169 if (event == NGX_READ_EVENT) { 172 if (event == NGX_READ_EVENT) {
170 FD_SET(c->fd, &master_read_fd_set); 173 FD_SET(c->fd, &master_read_fd_set);
171 174
172 } else if (event == NGX_WRITE_EVENT) { 175 } else if (event == NGX_WRITE_EVENT) {
173 FD_SET(c->fd, &master_write_fd_set); 176 FD_SET(c->fd, &master_write_fd_set);
245 static int ngx_select_process_events(ngx_log_t *log) 248 static int ngx_select_process_events(ngx_log_t *log)
246 { 249 {
247 int ready, found; 250 int ready, found;
248 u_int i, nready; 251 u_int i, nready;
249 ngx_err_t err; 252 ngx_err_t err;
250 ngx_msec_t timer, delta; 253 ngx_msec_t timer;
251 ngx_event_t *ev; 254 ngx_event_t *ev;
252 ngx_connection_t *c; 255 ngx_connection_t *c;
256 ngx_epoch_msec_t delta;
253 struct timeval tv, *tp; 257 struct timeval tv, *tp;
258 #if (HAVE_SELECT_CHANGE_TIMEOUT)
259 static ngx_epoch_msec_t deltas = 0;
260 #endif
254 261
255 work_read_fd_set = master_read_fd_set; 262 work_read_fd_set = master_read_fd_set;
256 work_write_fd_set = master_write_fd_set; 263 work_write_fd_set = master_write_fd_set;
257 264
258 timer = ngx_event_find_timer(); 265 timer = ngx_event_find_timer();
262 tv.tv_usec = (timer % 1000) * 1000; 269 tv.tv_usec = (timer % 1000) * 1000;
263 tp = &tv; 270 tp = &tv;
264 #if (HAVE_SELECT_CHANGE_TIMEOUT) 271 #if (HAVE_SELECT_CHANGE_TIMEOUT)
265 delta = 0; 272 delta = 0;
266 #else 273 #else
267 delta = ngx_msec(); 274 ngx_gettimeofday(&tv);
275 delta = tv.tv_sec * 1000 + tv.tv_usec / 1000;
268 #endif 276 #endif
269 277
270 } else { 278 } else {
271 timer = 0; 279 timer = 0;
272 tp = NULL; 280 tp = NULL;
312 320
313 #if (NGX_DEBUG_EVENT) 321 #if (NGX_DEBUG_EVENT)
314 ngx_log_debug(log, "select ready %d" _ ready); 322 ngx_log_debug(log, "select ready %d" _ ready);
315 #endif 323 #endif
316 324
317 /* TODO: time */ 325 #if (HAVE_SELECT_CHANGE_TIMEOUT)
318 326
319 if (timer) { 327 if (timer) {
320 #if (HAVE_SELECT_CHANGE_TIMEOUT)
321 delta = timer - (tv.tv_sec * 1000 + tv.tv_usec / 1000); 328 delta = timer - (tv.tv_sec * 1000 + tv.tv_usec / 1000);
322 329
323 #if 0
324 /* 330 /*
325 * update the cached time if the sum of the last deltas 331 * learn the real time and update the cached time
326 * is more than 0.5 seconds 332 * if the sum of the last deltas overcomes 1 second
327 */ 333 */
334
328 deltas += delta; 335 deltas += delta;
329 if (deltas > 500000) { 336 if (deltas > 1000) {
330 ngx_cached_time = ngx_real_time(); 337 ngx_gettimeofday(&tv);
331 deltas = 0; 338 deltas = tv.tv_usec / 1000;
332 } 339
333 #endif 340 if (ngx_cached_time != tv.tv_sec) {
334 341 ngx_cached_time = tv.tv_sec;
335 #else 342 ngx_time_update();
336 delta = ngx_msec() - delta; 343 }
337 #endif 344 }
338 345
339 #if (NGX_DEBUG_EVENT) 346 #if (NGX_DEBUG_EVENT)
340 ngx_log_debug(log, "select timer: %d, delta: %d" _ timer _ delta); 347 ngx_log_debug(log, "select timer: %d, delta: %d" _ timer _ (int) delta);
341 #endif 348 #endif
342 ngx_event_expire_timers(delta); 349
350 ngx_event_expire_timers((ngx_msec_t) delta);
351
352 } else {
353 ngx_gettimeofday(&tv);
354
355 if (ngx_cached_time != tv.tv_sec) {
356 ngx_cached_time = tv.tv_sec;
357 ngx_time_update();
358 }
359
360 if (ready == 0) {
361 ngx_log_error(NGX_LOG_ALERT, log, 0,
362 "select() returned no events without timeout");
363 return NGX_ERROR;
364 }
365
366 #if (NGX_DEBUG_EVENT)
367 ngx_log_debug(log, "select timer: %d, delta: %d" _ timer _ (int) delta);
368 #endif
369 }
370
371 #else /* HAVE_SELECT_CHANGE_TIMEOUT */
372
373 ngx_gettimeofday(&tv);
374
375 if (ngx_cached_time != tv.tv_sec) {
376 ngx_cached_time = tv.tv_sec;
377 ngx_time_update();
378 }
379
380 if (timer) {
381 delta = tv.tv_sec * 1000 + tv.tv_usec / 1000 - delta;
382
383 #if (NGX_DEBUG_EVENT)
384 ngx_log_debug(log, "select timer: %d, delta: %d" _ timer _ (int) delta);
385 #endif
386
387 ngx_event_expire_timers((ngx_msec_t) delta);
343 388
344 } else { 389 } else {
345 if (ready == 0) { 390 if (ready == 0) {
346 ngx_log_error(NGX_LOG_ALERT, log, 0, 391 ngx_log_error(NGX_LOG_ALERT, log, 0,
347 "select() returned no events without timeout"); 392 "select() returned no events without timeout");
348 return NGX_ERROR; 393 return NGX_ERROR;
349 } 394 }
350 395
351 #if (NGX_DEBUG_EVENT) 396 #if (NGX_DEBUG_EVENT)
352 ngx_log_debug(log, "select timer: %d, delta: %d" _ timer _ delta); 397 ngx_log_debug(log, "select timer: %d, delta: %d" _ timer _ (int) delta);
353 #endif 398 #endif
354 ngx_event_expire_timers(delta); 399 }
355 } 400
401 #endif /* HAVE_SELECT_CHANGE_TIMEOUT */
356 402
357 if (err) { 403 if (err) {
358 ngx_log_error(NGX_LOG_ALERT, log, err, "select() failed"); 404 ngx_log_error(NGX_LOG_ALERT, log, err, "select() failed");
359 return NGX_ERROR; 405 return NGX_ERROR;
360 } 406 }