Mercurial > hg > nginx
comparison src/event/ngx_event.h @ 189:c966c09be66b
nginx-0.0.1-2003-11-18-19:49:00 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 18 Nov 2003 16:49:00 +0000 |
parents | c1f3a3c7c5db |
children | 2357fa41738a |
comparison
equal
deleted
inserted
replaced
188:0061d1f0908d | 189:c966c09be66b |
---|---|
43 ngx_log_t *log; | 43 ngx_log_t *log; |
44 | 44 |
45 /* | 45 /* |
46 * kqueue only: | 46 * kqueue only: |
47 * accept: number of sockets that wait to be accepted | 47 * accept: number of sockets that wait to be accepted |
48 * read: bytes to read | 48 * read: bytes to read when event is ready |
49 * write: available space in buffer | 49 * or lowat when event is set with NGX_LOWAT_EVENT flag |
50 * write: available space in buffer when event is ready | |
51 * or lowat when event is set with NGX_LOWAT_EVENT flag | |
50 * | 52 * |
51 * otherwise: | 53 * otherwise: |
52 * accept: 1 if accept many, 0 otherwise | 54 * accept: 1 if accept many, 0 otherwise |
53 */ | 55 */ |
56 | |
57 #if (HAVE_KQUEUE) | |
54 int available; | 58 int available; |
59 #else | |
60 unsigned available:1; | |
61 #endif | |
55 | 62 |
56 unsigned oneshot:1; | 63 unsigned oneshot:1; |
57 | 64 |
58 unsigned write:1; | 65 unsigned write:1; |
59 | 66 |
100 #endif | 107 #endif |
101 | 108 |
102 #if (HAVE_KQUEUE) | 109 #if (HAVE_KQUEUE) |
103 /* the pending errno reported by kqueue */ | 110 /* the pending errno reported by kqueue */ |
104 int kq_errno; | 111 int kq_errno; |
105 #endif | |
106 | |
107 #if (HAVE_LOWAT_EVENT) /* kqueue's NOTE_LOWAT */ | |
108 int lowat; | |
109 #endif | 112 #endif |
110 | 113 |
111 | 114 |
112 #if (HAVE_AIO) | 115 #if (HAVE_AIO) |
113 | 116 |
222 * kqueue: kqueue deletes event filters for file that closed | 225 * kqueue: kqueue deletes event filters for file that closed |
223 * so we need only to delete filters in user-level batch array | 226 * so we need only to delete filters in user-level batch array |
224 * /dev/poll: we need to flush POLLREMOVE event before closing file | 227 * /dev/poll: we need to flush POLLREMOVE event before closing file |
225 */ | 228 */ |
226 | 229 |
227 #define NGX_CLOSE_EVENT 1 | 230 #define NGX_CLOSE_EVENT 1 |
231 | |
232 | |
233 /* this flag has meaning only for kqueue */ | |
234 #define NGX_LOWAT_EVENT 0 | |
228 | 235 |
229 | 236 |
230 #if (HAVE_KQUEUE) | 237 #if (HAVE_KQUEUE) |
231 | 238 |
232 #define NGX_READ_EVENT EVFILT_READ | 239 #define NGX_READ_EVENT EVFILT_READ |
233 #define NGX_WRITE_EVENT EVFILT_WRITE | 240 #define NGX_WRITE_EVENT EVFILT_WRITE |
234 | 241 |
235 /* | 242 /* |
236 * NGX_CLOSE_EVENT is the module flag and it would not go into a kernel | 243 * NGX_CLOSE_EVENT and NGX_LOWAT_EVENT are the module flags and they would |
237 * so we need to choose the value that would not interfere with any existent | 244 * not go into a kernel so we need to choose the value that would not interfere |
238 * and future flags. kqueue has such values - EV_FLAG1, EV_EOF and EV_ERROR. | 245 * with any existent and future kqueue flags. kqueue has such values - |
239 * They are reserved and cleared on a kernel entrance. | 246 * EV_FLAG1, EV_EOF and EV_ERROR. They are reserved and cleared on a kernel |
247 * entrance. | |
240 */ | 248 */ |
241 #undef NGX_CLOSE_EVENT | 249 #undef NGX_CLOSE_EVENT |
242 #define NGX_CLOSE_EVENT EV_FLAG1 | 250 #define NGX_CLOSE_EVENT EV_EOF |
251 | |
252 #undef NGX_LOWAT_EVENT | |
253 #define NGX_LOWAT_EVENT EV_FLAG1 | |
243 | 254 |
244 #define NGX_LEVEL_EVENT 0 | 255 #define NGX_LEVEL_EVENT 0 |
245 #define NGX_ONESHOT_EVENT EV_ONESHOT | 256 #define NGX_ONESHOT_EVENT EV_ONESHOT |
246 #define NGX_CLEAR_EVENT EV_CLEAR | 257 #define NGX_CLEAR_EVENT EV_CLEAR |
247 | 258 |
349 #include <ngx_iocp_module.h> | 360 #include <ngx_iocp_module.h> |
350 #endif | 361 #endif |
351 | 362 |
352 | 363 |
353 | 364 |
354 ngx_inline static int ngx_handle_read_event(ngx_event_t *rev, int close) | 365 ngx_inline static int ngx_handle_read_event(ngx_event_t *rev, int flags) |
355 { | 366 { |
356 if (ngx_event_flags & NGX_USE_CLEAR_EVENT) { | 367 if (ngx_event_flags & NGX_USE_CLEAR_EVENT) { |
357 | 368 |
358 /* kqueue */ | 369 /* kqueue */ |
359 | 370 |
378 } | 389 } |
379 | 390 |
380 return NGX_OK; | 391 return NGX_OK; |
381 } | 392 } |
382 | 393 |
383 if (rev->active && (rev->ready || close)) { | 394 if (rev->active && (rev->ready || (flags & NGX_CLOSE_EVENT))) { |
384 if (ngx_del_event(rev, NGX_READ_EVENT, close ? NGX_CLOSE_EVENT : 0) | 395 if (ngx_del_event(rev, NGX_READ_EVENT, flags) == NGX_ERROR) { |
385 == NGX_ERROR) | |
386 { | |
387 return NGX_ERROR; | 396 return NGX_ERROR; |
388 } | 397 } |
389 | 398 |
390 return NGX_OK; | 399 return NGX_OK; |
391 } | 400 } |
421 | 430 |
422 return NGX_OK; | 431 return NGX_OK; |
423 } | 432 } |
424 | 433 |
425 | 434 |
426 ngx_inline static int ngx_handle_write_event(ngx_event_t *wev, int lowat) | 435 ngx_inline static int ngx_handle_write_event(ngx_event_t *wev, int flags) |
427 { | 436 { |
428 if (ngx_event_flags & NGX_USE_CLEAR_EVENT) { | 437 if (ngx_event_flags & NGX_USE_CLEAR_EVENT) { |
429 | 438 |
430 /* kqueue */ | 439 /* kqueue */ |
431 | 440 |
432 #if (HAVE_LOWAT_EVENT) /* kqueue's NOTE_LOWAT */ | |
433 | |
434 if (ngx_event_flags & NGX_HAVE_LOWAT_EVENT) { | |
435 wev->lowat = lowat; | |
436 } | |
437 | |
438 #endif | |
439 if (!wev->active && !wev->ready) { | 441 if (!wev->active && !wev->ready) { |
440 if (ngx_add_event(wev, NGX_WRITE_EVENT, NGX_CLEAR_EVENT) | 442 if (ngx_add_event(wev, NGX_WRITE_EVENT, NGX_CLEAR_EVENT|flags) |
441 == NGX_ERROR) { | 443 == NGX_ERROR) { |
442 return NGX_ERROR; | 444 return NGX_ERROR; |
443 } | 445 } |
444 } | 446 } |
445 | 447 |