Mercurial > hg > nginx
comparison src/event/modules/ngx_select_module.c @ 302:1526e7686b20
nginx-0.0.3-2004-04-01-10:21:13 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Thu, 01 Apr 2004 06:21:13 +0000 |
parents | 87e73f067470 |
children | d71c87d11b16 |
comparison
equal
deleted
inserted
replaced
301:744965ec6275 | 302:1526e7686b20 |
---|---|
11 | 11 |
12 static int ngx_select_init(ngx_cycle_t *cycle); | 12 static int ngx_select_init(ngx_cycle_t *cycle); |
13 static void ngx_select_done(ngx_cycle_t *cycle); | 13 static void ngx_select_done(ngx_cycle_t *cycle); |
14 static int ngx_select_add_event(ngx_event_t *ev, int event, u_int flags); | 14 static int ngx_select_add_event(ngx_event_t *ev, int event, u_int flags); |
15 static int ngx_select_del_event(ngx_event_t *ev, int event, u_int flags); | 15 static int ngx_select_del_event(ngx_event_t *ev, int event, u_int flags); |
16 static int ngx_select_process_events(ngx_log_t *log); | 16 static int ngx_select_process_events(ngx_cycle_t *cycle); |
17 | 17 |
18 static char *ngx_select_init_conf(ngx_cycle_t *cycle, void *conf); | 18 static char *ngx_select_init_conf(ngx_cycle_t *cycle, void *conf); |
19 | 19 |
20 | 20 |
21 static fd_set master_read_fd_set; | 21 static fd_set master_read_fd_set; |
235 | 235 |
236 return NGX_OK; | 236 return NGX_OK; |
237 } | 237 } |
238 | 238 |
239 | 239 |
240 static int ngx_select_process_events(ngx_log_t *log) | 240 static int ngx_select_process_events(ngx_cycle_t *cycle) |
241 { | 241 { |
242 int i, ready, nready,found; | 242 int i, ready, nready,found; |
243 ngx_err_t err; | 243 ngx_err_t err; |
244 ngx_msec_t timer; | 244 ngx_msec_t timer; |
245 ngx_event_t *ev; | 245 ngx_event_t *ev; |
272 if (max_fd < c->fd) { | 272 if (max_fd < c->fd) { |
273 max_fd = c->fd; | 273 max_fd = c->fd; |
274 } | 274 } |
275 } | 275 } |
276 | 276 |
277 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, | 277 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
278 "change max_fd: %d", max_fd); | 278 "change max_fd: %d", max_fd); |
279 } | 279 } |
280 #endif | 280 #endif |
281 | 281 |
282 #if (NGX_DEBUG) | 282 #if (NGX_DEBUG) |
283 for (i = 0; i < nevents; i++) { | 283 for (i = 0; i < nevents; i++) { |
284 ev = event_index[i]; | 284 ev = event_index[i]; |
285 c = ev->data; | 285 c = ev->data; |
286 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0, | 286 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
287 "select event: fd:%d wr:%d", c->fd,ev->write); | 287 "select event: fd:%d wr:%d", c->fd,ev->write); |
288 } | 288 } |
289 #endif | 289 #endif |
290 | 290 |
291 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, "select timer: %d", timer); | 291 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
292 "select timer: %d", timer); | |
292 | 293 |
293 #if (WIN32) | 294 #if (WIN32) |
294 ready = select(0, &work_read_fd_set, &work_write_fd_set, NULL, tp); | 295 ready = select(0, &work_read_fd_set, &work_write_fd_set, NULL, tp); |
295 #else | 296 #else |
296 ready = select(max_fd + 1, &work_read_fd_set, &work_write_fd_set, NULL, tp); | 297 ready = select(max_fd + 1, &work_read_fd_set, &work_write_fd_set, NULL, tp); |
317 ngx_gettimeofday(&tv); | 318 ngx_gettimeofday(&tv); |
318 ngx_time_update(tv.tv_sec); | 319 ngx_time_update(tv.tv_sec); |
319 deltas = tv.tv_usec / 1000; | 320 deltas = tv.tv_usec / 1000; |
320 } | 321 } |
321 | 322 |
322 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0, | 323 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
323 "select timer: %d, delta: %d", timer, (int) delta); | 324 "select timer: %d, delta: %d", timer, (int) delta); |
324 | 325 |
325 } else { | 326 } else { |
326 delta = 0; | 327 delta = 0; |
327 ngx_gettimeofday(&tv); | 328 ngx_gettimeofday(&tv); |
328 ngx_time_update(tv.tv_sec); | 329 ngx_time_update(tv.tv_sec); |
329 | 330 |
330 if (ready == 0) { | 331 if (ready == 0) { |
331 ngx_log_error(NGX_LOG_ALERT, log, 0, | 332 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, |
332 "select() returned no events without timeout"); | 333 "select() returned no events without timeout"); |
333 return NGX_ERROR; | 334 return NGX_ERROR; |
334 } | 335 } |
335 } | 336 } |
336 | 337 |
343 ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec; | 344 ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec; |
344 | 345 |
345 if (timer) { | 346 if (timer) { |
346 delta = ngx_elapsed_msec - delta; | 347 delta = ngx_elapsed_msec - delta; |
347 | 348 |
348 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0, | 349 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
349 "select timer: %d, delta: %d", timer, (int) delta); | 350 "select timer: %d, delta: %d", timer, (int) delta); |
350 | 351 |
351 } else { | 352 } else { |
352 if (ready == 0) { | 353 if (ready == 0) { |
353 ngx_log_error(NGX_LOG_ALERT, log, 0, | 354 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, |
354 "select() returned no events without timeout"); | 355 "select() returned no events without timeout"); |
355 return NGX_ERROR; | 356 return NGX_ERROR; |
356 } | 357 } |
357 } | 358 } |
358 | 359 |
359 #endif /* HAVE_SELECT_CHANGE_TIMEOUT */ | 360 #endif /* HAVE_SELECT_CHANGE_TIMEOUT */ |
360 | 361 |
361 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, "select ready %d", ready); | 362 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
363 "select ready %d", ready); | |
362 | 364 |
363 if (err) { | 365 if (err) { |
364 #if (WIN32) | 366 #if (WIN32) |
365 ngx_log_error(NGX_LOG_ALERT, log, err, "select() failed"); | 367 ngx_log_error(NGX_LOG_ALERT, cycle->log, err, "select() failed"); |
366 #else | 368 #else |
367 ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT, | 369 ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT, |
368 log, err, "select() failed"); | 370 cycle->log, err, "select() failed"); |
369 #endif | 371 #endif |
370 return NGX_ERROR; | 372 return NGX_ERROR; |
371 } | 373 } |
372 | 374 |
373 nready = 0; | 375 nready = 0; |
378 found = 0; | 380 found = 0; |
379 | 381 |
380 if (ev->write) { | 382 if (ev->write) { |
381 if (FD_ISSET(c->fd, &work_write_fd_set)) { | 383 if (FD_ISSET(c->fd, &work_write_fd_set)) { |
382 found = 1; | 384 found = 1; |
383 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, | 385 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
384 "select write %d", c->fd); | 386 "select write %d", c->fd); |
385 } | 387 } |
386 | 388 |
387 } else { | 389 } else { |
388 if (FD_ISSET(c->fd, &work_read_fd_set)) { | 390 if (FD_ISSET(c->fd, &work_read_fd_set)) { |
389 found = 1; | 391 found = 1; |
390 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, | 392 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
391 "select read %d", c->fd); | 393 "select read %d", c->fd); |
392 } | 394 } |
393 } | 395 } |
394 | 396 |
395 if (found) { | 397 if (found) { |
421 | 423 |
422 ev->event_handler(ev); | 424 ev->event_handler(ev); |
423 } | 425 } |
424 | 426 |
425 if (ready != 0) { | 427 if (ready != 0) { |
426 ngx_log_error(NGX_LOG_ALERT, log, 0, "select ready != events"); | 428 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, "select ready != events"); |
427 } | 429 } |
428 | 430 |
429 if (timer && delta) { | 431 if (timer && delta) { |
430 ngx_event_expire_timers((ngx_msec_t) delta); | 432 ngx_event_expire_timers((ngx_msec_t) delta); |
431 } | 433 } |