comparison src/event/ngx_event_accept.c @ 87:5f6d848dcbef

nginx-0.0.1-2003-05-13-20:02:32 import
author Igor Sysoev <igor@sysoev.ru>
date Tue, 13 May 2003 16:02:32 +0000
parents 3973260705cc
children 637625a2acdb
comparison
equal deleted inserted replaced
86:3973260705cc 87:5f6d848dcbef
5 #include <ngx_core.h> 5 #include <ngx_core.h>
6 #include <ngx_types.h> 6 #include <ngx_types.h>
7 #include <ngx_log.h> 7 #include <ngx_log.h>
8 #include <ngx_connection.h> 8 #include <ngx_connection.h>
9 #include <ngx_event.h> 9 #include <ngx_event.h>
10 #include <ngx_event_close.h>
11 #include <ngx_event_accept.h>
12 10
13 11
14 /* This function should always return NGX_OK even there are some failures 12 void ngx_event_accept(ngx_event_t *ev)
15 because if we return NGX_ERROR then listening socket would be closed */
16
17 int ngx_event_accept(ngx_event_t *ev)
18 { 13 {
19 int instance; 14 int instance;
20 socklen_t len; 15 socklen_t len;
21 struct sockaddr *sa; 16 struct sockaddr *sa;
22 ngx_err_t err; 17 ngx_err_t err;
35 #if 0 30 #if 0
36 /* DEBUG */ ev->available++; 31 /* DEBUG */ ev->available++;
37 #endif 32 #endif
38 33
39 do { 34 do {
40 ngx_test_null(pool, ngx_create_pool(ls->pool_size, ev->log), NGX_OK); 35 pool = ngx_create_pool(ls->pool_size, ev->log);
36 if (pool == NULL) {
37 return;
38 }
41 39
42 ngx_test_null(sa, ngx_palloc(pool, ls->socklen), NGX_OK); 40 sa = ngx_palloc(pool, ls->socklen);
41 if (sa == NULL) {
42 return;
43 }
44
43 len = ls->socklen; 45 len = ls->socklen;
44 46
45 s = accept(ls->fd, sa, &len); 47 s = accept(ls->fd, sa, &len);
46 if (s == -1) { 48 if (s == -1) {
47 err = ngx_socket_errno; 49 err = ngx_socket_errno;
48 ngx_destroy_pool(pool); 50 ngx_destroy_pool(pool);
49 51
50 if (err == NGX_EAGAIN) { 52 if (err == NGX_EAGAIN) {
51 ngx_log_error(NGX_LOG_NOTICE, ev->log, err, 53 ngx_log_error(NGX_LOG_NOTICE, ev->log, err,
52 "EAGAIN while accept %s", ls->addr_text.data); 54 "EAGAIN while accept %s", ls->addr_text.data);
53 return NGX_OK; 55 return;
54 } 56 }
55 57
56 ngx_log_error(NGX_LOG_ALERT, ev->log, err, 58 ngx_log_error(NGX_LOG_ALERT, ev->log, err,
57 "accept %s failed", ls->addr_text.data); 59 "accept %s failed", ls->addr_text.data);
58 return NGX_OK; 60 return;
59 } 61 }
60 62
61 63
62 #if (HAVE_INHERITED_NONBLOCK) 64 #if (HAVE_INHERITED_NONBLOCK)
63 65
64 #if (HAVE_AIO_EVENT) 66 #if (HAVE_AIO_EVENT)
65 if ((ngx_event_flags & NGX_HAVE_AIO_EVENT)) { 67 if ((ngx_event_flags & NGX_HAVE_AIO_EVENT)) {
66 if (ngx_blocking(s) == -1) { 68 if (ngx_blocking(s) == -1) {
67 ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_socket_errno, 69 ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_socket_errno,
68 ngx_blocking_n " %s failed", ls->addr_text.data); 70 ngx_blocking_n " %s failed", ls->addr_text.data);
69 return NGX_OK; 71 return;
70 } 72 }
71 } 73 }
72 #endif 74 #endif
73 75
74 #else /* !HAVE_INHERITED_NONBLOCK */ 76 #else /* !HAVE_INHERITED_NONBLOCK */
76 #if (HAVE_AIO_EVENT) 78 #if (HAVE_AIO_EVENT)
77 if (!(ngx_event_flags & NGX_HAVE_AIO_EVENT)) { 79 if (!(ngx_event_flags & NGX_HAVE_AIO_EVENT)) {
78 if (ngx_nonblocking(s) == -1) { 80 if (ngx_nonblocking(s) == -1) {
79 ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_socket_errno, 81 ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_socket_errno,
80 ngx_nonblocking_n " %s failed", ls->addr_text.data); 82 ngx_nonblocking_n " %s failed", ls->addr_text.data);
81 return NGX_OK; 83 return;
82 } 84 }
83 } 85 }
84 #else 86 #else
85 if (ngx_nonblocking(s) == -1) { 87 if (ngx_nonblocking(s) == -1) {
86 ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_socket_errno, 88 ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_socket_errno,
87 ngx_nonblocking_n " %s failed", ls->addr_text.data); 89 ngx_nonblocking_n " %s failed", ls->addr_text.data);
88 return NGX_OK; 90 return;
89 } 91 }
90 #endif 92 #endif
91 93
92 #endif /* HAVE_INHERITED_NONBLOCK */ 94 #endif /* HAVE_INHERITED_NONBLOCK */
93 95
131 } 133 }
132 #endif 134 #endif
133 135
134 /* STUB ? */ wev->timer = rev->timer = 10000; 136 /* STUB ? */ wev->timer = rev->timer = 10000;
135 137
136 wev->timer_handler = rev->timer_handler = ngx_event_close_connection;
137 wev->close_handler = rev->close_handler = ngx_event_close_connection;
138
139 c->ctx = ls->ctx; 138 c->ctx = ls->ctx;
140 c->servers = ls->servers; 139 c->servers = ls->servers;
141 140
142 ngx_test_null(c->log, ngx_palloc(c->pool, sizeof(ngx_log_t)), NGX_OK); 141 c->log = ngx_palloc(c->pool, sizeof(ngx_log_t));
142 if (c->log == NULL) {
143 return;
144 }
143 ngx_memcpy(c->log, ev->log, sizeof(ngx_log_t)); 145 ngx_memcpy(c->log, ev->log, sizeof(ngx_log_t));
144 rev->log = wev->log = c->log; 146 rev->log = wev->log = c->log;
145 147
146 /* STUB: x86: SP: xadd ?, MT: lock xadd, MP: lock xadd, shared */ 148 /* STUB: x86: SP: xadd ?, MT: lock xadd, MP: lock xadd, shared */
147 c->number = ngx_connection_counter++; 149 c->number = ngx_connection_counter++;
157 159
158 #if (HAVE_EDGE_EVENT) /* epoll */ 160 #if (HAVE_EDGE_EVENT) /* epoll */
159 161
160 if (ngx_event_flags & NGX_HAVE_EDGE_EVENT) { 162 if (ngx_event_flags & NGX_HAVE_EDGE_EVENT) {
161 if (ngx_edge_add_event(ev) == NGX_ERROR) { 163 if (ngx_edge_add_event(ev) == NGX_ERROR) {
162 return NGX_OK; 164 return;
163 } 165 }
164 } 166 }
165 167
166 #endif 168 #endif
167 169
181 } 183 }
182 184
183 #endif 185 #endif
184 } while (ev->available); 186 } while (ev->available);
185 187
186 return NGX_OK; 188 return;
187 } 189 }