Mercurial > hg > nginx-quic
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 } |