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 }