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