Mercurial > hg > nginx
comparison src/event/modules/ngx_iocp_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 | f81d075ad172 |
children | 02a511569afb |
comparison
equal
deleted
inserted
replaced
301:744965ec6275 | 302:1526e7686b20 |
---|---|
12 | 12 |
13 static ngx_int_t ngx_iocp_init(ngx_cycle_t *cycle); | 13 static ngx_int_t ngx_iocp_init(ngx_cycle_t *cycle); |
14 static void ngx_iocp_done(ngx_cycle_t *cycle); | 14 static void ngx_iocp_done(ngx_cycle_t *cycle); |
15 static ngx_int_t ngx_iocp_add_event(ngx_event_t *ev, int event, u_int key); | 15 static ngx_int_t ngx_iocp_add_event(ngx_event_t *ev, int event, u_int key); |
16 static ngx_int_t ngx_iocp_del_connection(ngx_connection_t *c, u_int flags); | 16 static ngx_int_t ngx_iocp_del_connection(ngx_connection_t *c, u_int flags); |
17 static ngx_int_t ngx_iocp_process_events(ngx_log_t *log); | 17 static ngx_int_t ngx_iocp_process_events(ngx_cycle_t *cycle); |
18 static void *ngx_iocp_create_conf(ngx_cycle_t *cycle); | 18 static void *ngx_iocp_create_conf(ngx_cycle_t *cycle); |
19 static char *ngx_iocp_init_conf(ngx_cycle_t *cycle, void *conf); | 19 static char *ngx_iocp_init_conf(ngx_cycle_t *cycle, void *conf); |
20 | 20 |
21 | 21 |
22 static ngx_str_t iocp_name = ngx_string("iocp"); | 22 static ngx_str_t iocp_name = ngx_string("iocp"); |
158 | 158 |
159 return NGX_OK; | 159 return NGX_OK; |
160 } | 160 } |
161 | 161 |
162 | 162 |
163 static ngx_int_t ngx_iocp_process_events(ngx_log_t *log) | 163 static ngx_int_t ngx_iocp_process_events(ngx_cycle_t *cycle) |
164 { | 164 { |
165 int rc; | 165 int rc; |
166 u_int key; | 166 u_int key; |
167 u_long bytes; | 167 u_long bytes; |
168 ngx_err_t err; | 168 ngx_err_t err; |
177 | 177 |
178 if (timer == 0) { | 178 if (timer == 0) { |
179 timer = INFINITE; | 179 timer = INFINITE; |
180 } | 180 } |
181 | 181 |
182 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, "iocp timer: %d", timer); | 182 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "iocp timer: %d", timer); |
183 | 183 |
184 rc = GetQueuedCompletionStatus(iocp, &bytes, (LPDWORD) &key, | 184 rc = GetQueuedCompletionStatus(iocp, &bytes, (LPDWORD) &key, |
185 (LPOVERLAPPED *) &ovlp, timer); | 185 (LPOVERLAPPED *) &ovlp, timer); |
186 | 186 |
187 if (rc == 0) { | 187 if (rc == 0) { |
191 } | 191 } |
192 | 192 |
193 ngx_gettimeofday(&tv); | 193 ngx_gettimeofday(&tv); |
194 ngx_time_update(tv.tv_sec); | 194 ngx_time_update(tv.tv_sec); |
195 | 195 |
196 ngx_log_debug4(NGX_LOG_DEBUG_EVENT, log, 0, | 196 ngx_log_debug4(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
197 "iocp: %d b:%d k:%d ov:" PTR_FMT, rc, bytes, key, ovlp); | 197 "iocp: %d b:%d k:%d ov:" PTR_FMT, rc, bytes, key, ovlp); |
198 | 198 |
199 delta = ngx_elapsed_msec; | 199 delta = ngx_elapsed_msec; |
200 ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec; | 200 ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec; |
201 | 201 |
202 if (err) { | 202 if (err) { |
203 if (ovlp == NULL) { | 203 if (ovlp == NULL) { |
204 if (err != WAIT_TIMEOUT) { | 204 if (err != WAIT_TIMEOUT) { |
205 ngx_log_error(NGX_LOG_ALERT, log, err, | 205 ngx_log_error(NGX_LOG_ALERT, cycle->log, err, |
206 "GetQueuedCompletionStatus() failed"); | 206 "GetQueuedCompletionStatus() failed"); |
207 | 207 |
208 return NGX_ERROR; | 208 return NGX_ERROR; |
209 } | 209 } |
210 | 210 |
214 } | 214 } |
215 | 215 |
216 if (timer != INFINITE) { | 216 if (timer != INFINITE) { |
217 delta = ngx_elapsed_msec - delta; | 217 delta = ngx_elapsed_msec - delta; |
218 | 218 |
219 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0, | 219 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
220 "iocp timer: %d, delta: %d", timer, (int) delta); | 220 "iocp timer: %d, delta: %d", timer, (int) delta); |
221 } | 221 } |
222 | 222 |
223 if (ovlp) { | 223 if (ovlp) { |
224 ev = ovlp->event; | 224 ev = ovlp->event; |
225 | 225 |
226 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, "iocp event:" PTR_FMT, ev); | 226 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
227 "iocp event:" PTR_FMT, ev); | |
227 | 228 |
228 switch (key) { | 229 switch (key) { |
229 | 230 |
230 case NGX_IOCP_ACCEPT: | 231 case NGX_IOCP_ACCEPT: |
231 if (bytes) { | 232 if (bytes) { |
242 ev->ready = 1; | 243 ev->ready = 1; |
243 } | 244 } |
244 | 245 |
245 ev->available = bytes; | 246 ev->available = bytes; |
246 | 247 |
247 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, | 248 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
248 "iocp event handler: " PTR_FMT, ev->event_handler); | 249 "iocp event handler: " PTR_FMT, ev->event_handler); |
249 | 250 |
250 ev->event_handler(ev); | 251 ev->event_handler(ev); |
251 } | 252 } |
252 | 253 |