Mercurial > hg > nginx-quic
comparison src/event/ngx_event.h @ 59:e8cdc2989cee
nginx-0.0.1-2003-02-06-20:21:13 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Thu, 06 Feb 2003 17:21:13 +0000 |
parents | a499e0d1f16e |
children | 50186b49f2ad |
comparison
equal
deleted
inserted
replaced
58:6b13b1cadabe | 59:e8cdc2989cee |
---|---|
13 | 13 |
14 #define NGX_INVALID_INDEX 0x80000000 | 14 #define NGX_INVALID_INDEX 0x80000000 |
15 | 15 |
16 typedef struct ngx_event_s ngx_event_t; | 16 typedef struct ngx_event_s ngx_event_t; |
17 | 17 |
18 #if (HAVE_IOCP) | |
19 typedef struct { | |
20 WSAOVERLAPPED ovlp; | |
21 ngx_event_t *event; | |
22 int error; | |
23 } ngx_event_ovlp_t; | |
24 #endif | |
25 | |
26 | |
18 struct ngx_event_s { | 27 struct ngx_event_s { |
19 void *data; | 28 void *data; |
20 | 29 |
21 int (*event_handler)(ngx_event_t *ev); | 30 int (*event_handler)(ngx_event_t *ev); |
22 int (*close_handler)(ngx_event_t *ev); | 31 int (*close_handler)(ngx_event_t *ev); |
43 /* read: bytes to read */ | 52 /* read: bytes to read */ |
44 /* write: available space in buffer */ | 53 /* write: available space in buffer */ |
45 /* otherwise: */ | 54 /* otherwise: */ |
46 /* accept: 1 if accept many, 0 otherwise */ | 55 /* accept: 1 if accept many, 0 otherwise */ |
47 | 56 |
48 /* flags - int are probably faster on write then bits ??? */ | |
49 | |
50 unsigned oneshot:1; | 57 unsigned oneshot:1; |
51 | 58 |
59 #if 0 | |
52 unsigned listening:1; | 60 unsigned listening:1; |
61 #endif | |
53 unsigned write:1; | 62 unsigned write:1; |
54 | 63 |
55 unsigned active:1; | 64 unsigned active:1; |
56 unsigned ready:1; | 65 unsigned ready:1; |
57 unsigned timedout:1; | 66 unsigned timedout:1; |
64 unsigned unexpected_eof:1; | 73 unsigned unexpected_eof:1; |
65 | 74 |
66 #if (HAVE_DEFERRED_ACCEPT) | 75 #if (HAVE_DEFERRED_ACCEPT) |
67 unsigned deferred_accept:1; | 76 unsigned deferred_accept:1; |
68 #endif | 77 #endif |
78 | |
69 #if (HAVE_KQUEUE) | 79 #if (HAVE_KQUEUE) |
70 unsigned eof:1; | 80 unsigned eof:1; |
71 int error; | 81 int error; |
72 #endif | 82 #endif |
83 | |
84 | |
85 #if (HAVE_AIO) | |
86 | |
87 #if (HAVE_IOCP) | |
88 ngx_event_ovlp_t ovlp; | |
89 #else | |
90 struct aiocb aiocb; | |
91 #endif | |
92 | |
93 #endif | |
94 | |
73 | 95 |
74 #if 0 | 96 #if 0 |
75 void *thr_ctx; /* event thread context if $(CC) doesn't | 97 void *thr_ctx; /* event thread context if $(CC) doesn't |
76 understand __thread declaration | 98 understand __thread declaration |
77 and pthread_getspecific() is too costly */ | 99 and pthread_getspecific() is too costly */ |
92 NGX_DEVPOLL_EVENT, | 114 NGX_DEVPOLL_EVENT, |
93 #endif | 115 #endif |
94 #if (HAVE_KQUEUE) | 116 #if (HAVE_KQUEUE) |
95 NGX_KQUEUE_EVENT, | 117 NGX_KQUEUE_EVENT, |
96 #endif | 118 #endif |
119 #if (HAVE_IOCP) | |
120 NGX_IOCP_EVENT, | |
121 #endif | |
122 NGX_DUMMY_EVENT /* avoid comma at end of enumerator list */ | |
97 } ngx_event_type_e ; | 123 } ngx_event_type_e ; |
98 | 124 |
99 typedef struct { | 125 typedef struct { |
100 int (*add)(ngx_event_t *ev, int event, u_int flags); | 126 int (*add)(ngx_event_t *ev, int event, u_int flags); |
101 int (*del)(ngx_event_t *ev, int event, u_int flags); | 127 int (*del)(ngx_event_t *ev, int event, u_int flags); |
123 #define NGX_HAVE_EDGE_EVENT 8 | 149 #define NGX_HAVE_EDGE_EVENT 8 |
124 | 150 |
125 /* No need to add or delete event filters - overlapped, aio_read, aioread */ | 151 /* No need to add or delete event filters - overlapped, aio_read, aioread */ |
126 #define NGX_HAVE_AIO_EVENT 16 | 152 #define NGX_HAVE_AIO_EVENT 16 |
127 | 153 |
154 /* Need to add socket or halde only once - i/o completion port. | |
155 It also requires to set HAVE_AIO_EVENT and NGX_HAVE_AIO_EVENT */ | |
156 #define NGX_HAVE_IOCP_EVENT 32 | |
157 | |
128 /* Event filter is deleted before closing file. Has no meaning | 158 /* Event filter is deleted before closing file. Has no meaning |
129 for select, poll, epoll. | 159 for select, poll, epoll. |
130 | 160 |
131 kqueue: kqueue deletes event filters for file that closed | 161 kqueue: kqueue deletes event filters for file that closed |
132 so we need only to delete filters in user-level batch array | 162 so we need only to delete filters in user-level batch array |
185 | 215 |
186 #define ngx_init_events (ngx_event_init[ngx_event_type]) | 216 #define ngx_init_events (ngx_event_init[ngx_event_type]) |
187 #define ngx_process_events ngx_event_actions.process | 217 #define ngx_process_events ngx_event_actions.process |
188 #define ngx_add_event ngx_event_actions.add | 218 #define ngx_add_event ngx_event_actions.add |
189 #define ngx_del_event ngx_event_actions.del | 219 #define ngx_del_event ngx_event_actions.del |
220 | |
190 #if 0 | 221 #if 0 |
191 #define ngx_add_timer ngx_event_actions.timer | 222 #define ngx_add_timer ngx_event_actions.timer |
192 #else | 223 #else |
193 #define ngx_add_timer ngx_event_add_timer | 224 #define ngx_add_timer ngx_event_add_timer |
194 #endif | 225 #endif |
226 | |
227 #if (HAVE_IOCP_EVENT) | |
228 #define ngx_event_recv ngx_event_wsarecv | |
229 #elif (HAVE_AIO_EVENT) | |
230 #define ngx_event_recv ngx_event_aio_read | |
231 #else | |
195 #define ngx_event_recv ngx_event_recv_core | 232 #define ngx_event_recv ngx_event_recv_core |
233 #endif | |
196 | 234 |
197 #endif | 235 #endif |
198 | 236 |
199 #define ngx_del_timer ngx_event_del_timer | 237 #define ngx_del_timer ngx_event_del_timer |
200 | |
201 | |
202 #if 0 | |
203 ngx_inline static void ngx_del_timer(ngx_event_t *ev) | |
204 { | |
205 #if (NGX_DEBUG_EVENT) | |
206 /* STUB - we can not cast (ngx_connection_t *) here */ | |
207 ngx_log_debug(ev->log, "del timer: %d" _ *(int *)(ev->data)); | |
208 #endif | |
209 | |
210 if (ev->timer_prev) { | |
211 ev->timer_prev->timer_next = ev->timer_next; | |
212 } | |
213 | |
214 if (ev->timer_next) { | |
215 ev->timer_next->timer_delta += ev->timer_delta; | |
216 ev->timer_next->timer_prev = ev->timer_prev; | |
217 ev->timer_next = NULL; | |
218 } | |
219 | |
220 if (ev->timer_prev) { | |
221 ev->timer_prev = NULL; | |
222 } | |
223 } | |
224 #endif | |
225 | 238 |
226 | 239 |
227 | 240 |
228 extern ngx_event_t *ngx_read_events; | 241 extern ngx_event_t *ngx_read_events; |
229 extern ngx_event_t *ngx_write_events; | 242 extern ngx_event_t *ngx_write_events; |
234 extern ngx_event_type_e ngx_event_type; | 247 extern ngx_event_type_e ngx_event_type; |
235 extern int ngx_event_flags; | 248 extern int ngx_event_flags; |
236 #endif | 249 #endif |
237 | 250 |
238 | 251 |
252 ssize_t ngx_event_recv_core(ngx_connection_t *c, char *buf, size_t size); | |
253 int ngx_event_close_connection(ngx_event_t *ev); | |
254 | |
255 | |
239 void ngx_pre_thread(ngx_array_t *ls, ngx_pool_t *pool, ngx_log_t *log); | 256 void ngx_pre_thread(ngx_array_t *ls, ngx_pool_t *pool, ngx_log_t *log); |
240 void ngx_worker(ngx_log_t *log); | 257 void ngx_worker(ngx_log_t *log); |
241 | 258 |
242 | 259 |
243 #endif /* _NGX_EVENT_H_INCLUDED_ */ | 260 #endif /* _NGX_EVENT_H_INCLUDED_ */ |