Mercurial > hg > nginx
comparison src/event/ngx_event.h @ 164:84036764e215
nginx-0.0.1-2003-10-29-11:30:44 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Wed, 29 Oct 2003 08:30:44 +0000 |
parents | fb61ba77beba |
children | 389d7ee9fa60 |
comparison
equal
deleted
inserted
replaced
163:fb61ba77beba | 164:84036764e215 |
---|---|
58 | 58 |
59 /* used to detect the stale events in kqueue, rt signals and epoll */ | 59 /* used to detect the stale events in kqueue, rt signals and epoll */ |
60 unsigned instance:1; | 60 unsigned instance:1; |
61 | 61 |
62 /* | 62 /* |
63 * event was passed or would be passed to a kernel; | 63 * the event was passed or would be passed to a kernel; |
64 * the posted aio operation. | 64 * aio mode: 1 - the posted aio operation, |
65 * 0 - the complete aio operation or no aio operation. | |
65 */ | 66 */ |
66 unsigned active:1; | 67 unsigned active:1; |
67 | 68 |
68 /* ready event; the complete aio operation */ | 69 /* |
70 * the ready event; | |
71 * in aio mode "ready" is always set - it makes things simple | |
72 * to learn whether the aio operation complete use aio_complete flag | |
73 */ | |
69 unsigned ready:1; | 74 unsigned ready:1; |
75 unsigned aio_complete:1; | |
70 | 76 |
71 unsigned eof:1; | 77 unsigned eof:1; |
72 unsigned error:1; | 78 unsigned error:1; |
73 | 79 |
74 unsigned timedout:1; | 80 unsigned timedout:1; |
336 #include <ngx_iocp_module.h> | 342 #include <ngx_iocp_module.h> |
337 #endif | 343 #endif |
338 | 344 |
339 | 345 |
340 | 346 |
341 ngx_inline static int ngx_handle_read_event(ngx_event_t *rev) | 347 ngx_inline static int ngx_handle_read_event(ngx_event_t *rev, int close) |
342 { | 348 { |
343 if (ngx_event_flags & (NGX_USE_AIO_EVENT|NGX_USE_EDGE_EVENT)) { | |
344 | |
345 /* aio, iocp, epoll */ | |
346 | |
347 return NGX_OK; | |
348 } | |
349 | |
350 if (ngx_event_flags & NGX_USE_CLEAR_EVENT) { | 349 if (ngx_event_flags & NGX_USE_CLEAR_EVENT) { |
351 | 350 |
352 /* kqueue */ | 351 /* kqueue */ |
353 | 352 |
354 if (!rev->active && !rev->ready) { | 353 if (!rev->active && !rev->ready) { |
357 return NGX_ERROR; | 356 return NGX_ERROR; |
358 } | 357 } |
359 } | 358 } |
360 | 359 |
361 return NGX_OK; | 360 return NGX_OK; |
361 | |
362 } else if (ngx_event_flags & NGX_USE_LEVEL_EVENT) { | |
363 | |
364 /* select, poll, /dev/poll */ | |
365 | |
366 if (!rev->active && !rev->ready) { | |
367 if (ngx_add_event(rev, NGX_READ_EVENT, NGX_LEVEL_EVENT) | |
368 == NGX_ERROR) { | |
369 return NGX_ERROR; | |
370 } | |
371 | |
372 return NGX_OK; | |
373 } | |
374 | |
375 if (rev->active && (rev->ready || close)) { | |
376 if (ngx_del_event(rev, NGX_READ_EVENT, close ? NGX_CLOSE_EVENT : 0) | |
377 == NGX_ERROR) { | |
378 return NGX_ERROR; | |
379 } | |
380 | |
381 return NGX_OK; | |
382 } | |
362 } | 383 } |
363 | 384 |
364 /* select, poll, /dev/poll */ | 385 /* aio, iocp, epoll, rt signals */ |
365 | |
366 if (!rev->active && !rev->ready) { | |
367 if (ngx_add_event(rev, NGX_READ_EVENT, NGX_LEVEL_EVENT) == NGX_ERROR) { | |
368 return NGX_ERROR; | |
369 } | |
370 | |
371 return NGX_OK; | |
372 } | |
373 | |
374 if (rev->active && (rev->ready || rev->eof)) { | |
375 if (ngx_del_event(rev, NGX_READ_EVENT, rev->eof ? NGX_CLOSE_EVENT : 0) | |
376 == NGX_ERROR) { | |
377 return NGX_ERROR; | |
378 } | |
379 | |
380 return NGX_OK; | |
381 } | |
382 | 386 |
383 return NGX_OK; | 387 return NGX_OK; |
384 } | 388 } |
385 | 389 |
386 | 390 |
409 } | 413 } |
410 | 414 |
411 | 415 |
412 ngx_inline static int ngx_handle_write_event(ngx_event_t *wev, int lowat) | 416 ngx_inline static int ngx_handle_write_event(ngx_event_t *wev, int lowat) |
413 { | 417 { |
414 if (ngx_event_flags & (NGX_USE_AIO_EVENT|NGX_USE_EDGE_EVENT)) { | |
415 | |
416 /* aio, iocp, epoll */ | |
417 | |
418 return NGX_OK; | |
419 } | |
420 | |
421 if (ngx_event_flags & NGX_USE_CLEAR_EVENT) { | 418 if (ngx_event_flags & NGX_USE_CLEAR_EVENT) { |
422 | 419 |
423 /* kqueue */ | 420 /* kqueue */ |
424 | 421 |
425 #if (HAVE_LOWAT_EVENT) /* kqueue's NOTE_LOWAT */ | 422 #if (HAVE_LOWAT_EVENT) /* kqueue's NOTE_LOWAT */ |
435 return NGX_ERROR; | 432 return NGX_ERROR; |
436 } | 433 } |
437 } | 434 } |
438 | 435 |
439 return NGX_OK; | 436 return NGX_OK; |
437 | |
438 } else if (ngx_event_flags & NGX_USE_LEVEL_EVENT) { | |
439 | |
440 /* select, poll, /dev/poll */ | |
441 | |
442 if (!wev->active && !wev->ready) { | |
443 if (ngx_add_event(wev, NGX_WRITE_EVENT, NGX_LEVEL_EVENT) | |
444 == NGX_ERROR) { | |
445 return NGX_ERROR; | |
446 } | |
447 | |
448 return NGX_OK; | |
449 } | |
450 | |
451 if (wev->active && wev->ready) { | |
452 if (ngx_del_event(wev, NGX_WRITE_EVENT, 0) == NGX_ERROR) { | |
453 return NGX_ERROR; | |
454 } | |
455 | |
456 return NGX_OK; | |
457 } | |
440 } | 458 } |
441 | 459 |
442 /* select, poll, /dev/poll */ | 460 /* aio, iocp, epoll, rt signals */ |
443 | |
444 if (!wev->active && !wev->ready) { | |
445 if (ngx_add_event(wev, NGX_WRITE_EVENT, NGX_LEVEL_EVENT) == NGX_ERROR) { | |
446 return NGX_ERROR; | |
447 } | |
448 | |
449 return NGX_OK; | |
450 } | |
451 | |
452 if (wev->active && wev->ready) { | |
453 if (ngx_del_event(wev, NGX_WRITE_EVENT, 0) == NGX_ERROR) { | |
454 return NGX_ERROR; | |
455 } | |
456 | |
457 return NGX_OK; | |
458 } | |
459 | 461 |
460 return NGX_OK; | 462 return NGX_OK; |
461 } | 463 } |
462 | 464 |
463 | 465 |