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_ */