comparison src/event/ngx_event_acceptex.c @ 102:7e86d028d8f0

nginx-0.0.1-2003-06-06-18:59:20 import
author Igor Sysoev <igor@sysoev.ru>
date Fri, 06 Jun 2003 14:59:20 +0000
parents 7ebc8b7fb816
children 6dfda4cf5200
comparison
equal deleted inserted replaced
101:2e069b6e6920 102:7e86d028d8f0
3 #include <ngx_core.h> 3 #include <ngx_core.h>
4 4
5 #include <ngx_listen.h> 5 #include <ngx_listen.h>
6 6
7 #include <ngx_event.h> 7 #include <ngx_event.h>
8 #if 0
8 #include <ngx_event_close.h> 9 #include <ngx_event_close.h>
9 #include <ngx_iocp_module.h> 10 #include <ngx_iocp_module.h>
10 11 #endif
11 #include <ngx_event_acceptex.h>
12 12
13 13
14 14 void ngx_event_acceptex(ngx_event_t *rev)
15 void ngx_event_acceptex(ngx_event_t *ev)
16 { 15 {
17 ngx_connection_t *c; 16 ngx_connection_t *c;
18 17
19 c = (ngx_connection_t *) ev->data; 18 c = (ngx_connection_t *) rev->data;
20 19
21 if (ev->ovlp.error) { 20 ngx_log_debug(rev->log, "ADDR: %s" _ c->addr_text.data);
22 ngx_log_error(NGX_LOG_CRIT, ev->log, ev->ovlp.error, 21
23 "AcceptEx() falied for %s", c->addr_text.data); 22 if (rev->ovlp.error) {
23 ngx_log_error(NGX_LOG_CRIT, rev->log, rev->ovlp.error,
24 "AcceptEx() failed for %s", c->addr_text.data);
24 return; 25 return;
25 } 26 }
26 27
27 /* TODO: can we do SO_UPDATE_ACCEPT_CONTEXT just before shutdown() ??? 28 /* SO_UPDATE_ACCEPT_CONTEXT is required for shutdown() to work */
28 or AcceptEx's context will be lost ??? */
29 29
30 /* SO_UPDATE_ACCEPT_CONTEXT is required for shutdown() to work */
31 if (setsockopt(c->fd, SOL_SOCKET, SO_UPDATE_ACCEPT_CONTEXT, 30 if (setsockopt(c->fd, SOL_SOCKET, SO_UPDATE_ACCEPT_CONTEXT,
32 (char *)&c->listening->fd, sizeof(ngx_socket_t)) == -1) 31 (char *)&c->listening->fd, sizeof(ngx_socket_t)) == -1)
33 { 32 {
34 ngx_log_error(NGX_LOG_CRIT, ev->log, ngx_socket_errno, 33 ngx_log_error(NGX_LOG_CRIT, ev->log, ngx_socket_errno,
35 "setsockopt(SO_UPDATE_ACCEPT_CONTEXT) failed for %s", 34 "setsockopt(SO_UPDATE_ACCEPT_CONTEXT) failed for %s",
36 c->addr_text.data); 35 c->addr_text.data);
37 36 } else {
38 /* non fatal - we can not only do lingering close */ 37 accept_context_updated = 1;
39 } 38 }
40 39
41 getacceptexsockaddrs(c->data, 0, 40 getacceptexsockaddrs(c->data, 0,
42 c->socklen + 16, c->socklen + 16, 41 c->socklen + 16, c->socklen + 16,
43 &c->local_sockaddr, &c->local_socklen, 42 &c->local_sockaddr, &c->local_socklen,
73 72
74 s = ngx_socket(ls->family, ls->type, ls->protocol, ls->flags); 73 s = ngx_socket(ls->family, ls->type, ls->protocol, ls->flags);
75 74
76 if (s == -1) { 75 if (s == -1) {
77 ngx_log_error(NGX_LOG_ALERT, ls->log, ngx_socket_errno, 76 ngx_log_error(NGX_LOG_ALERT, ls->log, ngx_socket_errno,
78 ngx_socket_n " for AcceptEx(%s) falied", 77 ngx_socket_n " for AcceptEx() post failed");
79 ls->addr_text.data);
80 78
81 return NGX_ERROR; 79 return NGX_ERROR;
82 } 80 }
83 81
84 ngx_test_null(pool, ngx_create_pool(ls->pool_size, ls->log), NGX_ERROR); 82 ngx_test_null(pool, ngx_create_pool(ls->pool_size, ls->log), NGX_ERROR);
130 ngx_test_null(c->log, ngx_palloc(c->pool, sizeof(ngx_log_t)), 128 ngx_test_null(c->log, ngx_palloc(c->pool, sizeof(ngx_log_t)),
131 NGX_ERROR); 129 NGX_ERROR);
132 ngx_memcpy(c->log, ls->log, sizeof(ngx_log_t)); 130 ngx_memcpy(c->log, ls->log, sizeof(ngx_log_t));
133 rev->log = wev->log = c->log; 131 rev->log = wev->log = c->log;
134 132
135 if (ngx_iocp_add_event(rev) == NGX_ERROR) { 133 if (ngx_add_event(rev, 0, NGX_IOCP_IO) == NGX_ERROR) {
136 return NGX_ERROR; 134 return NGX_ERROR;
137 } 135 }
138 136
139 if (acceptex(ls->fd, s, c->data, 0, 137 if (acceptex(ls->fd, s, c->data, 0,
140 c->socklen + 16, c->socklen + 16, 138 c->socklen + 16, c->socklen + 16,