Mercurial > hg > nginx
comparison src/event/ngx_event_acceptex.c @ 1633:74b2a52bc3c9
TransmitPackets(), ConnectEx(), and DisconnectEx()
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Sun, 11 Nov 2007 18:56:50 +0000 |
parents | 5e8fb59c18c1 |
children | 2a92804f4109 |
comparison
equal
deleted
inserted
replaced
1632:2142e5cf62da | 1633:74b2a52bc3c9 |
---|---|
30 } | 30 } |
31 | 31 |
32 /* SO_UPDATE_ACCEPT_CONTEXT is required for shutdown() to work */ | 32 /* SO_UPDATE_ACCEPT_CONTEXT is required for shutdown() to work */ |
33 | 33 |
34 if (setsockopt(c->fd, SOL_SOCKET, SO_UPDATE_ACCEPT_CONTEXT, | 34 if (setsockopt(c->fd, SOL_SOCKET, SO_UPDATE_ACCEPT_CONTEXT, |
35 (char *) &c->listening->fd, sizeof(ngx_socket_t)) == -1) | 35 (char *) &c->listening->fd, sizeof(ngx_socket_t)) |
36 == -1) | |
36 { | 37 { |
37 ngx_log_error(NGX_LOG_CRIT, c->log, ngx_socket_errno, | 38 ngx_log_error(NGX_LOG_CRIT, c->log, ngx_socket_errno, |
38 "setsockopt(SO_UPDATE_ACCEPT_CONTEXT) failed for %V", | 39 "setsockopt(SO_UPDATE_ACCEPT_CONTEXT) failed for %V", |
39 &c->addr_text); | 40 &c->addr_text); |
40 } else { | 41 } else { |
41 c->accept_context_updated = 1; | 42 c->accept_context_updated = 1; |
42 } | 43 } |
43 | 44 |
44 getacceptexsockaddrs(c->buffer->pos, c->listening->post_accept_buffer_size, | 45 ngx_getacceptexsockaddrs(c->buffer->pos, |
45 c->listening->socklen + 16, | 46 c->listening->post_accept_buffer_size, |
46 c->listening->socklen + 16, | 47 c->listening->socklen + 16, |
47 &c->local_sockaddr, &c->local_socklen, | 48 c->listening->socklen + 16, |
48 &c->sockaddr, &c->socklen); | 49 &c->local_sockaddr, &c->local_socklen, |
50 &c->sockaddr, &c->socklen); | |
49 | 51 |
50 if (c->listening->post_accept_buffer_size) { | 52 if (c->listening->post_accept_buffer_size) { |
51 c->buffer->last += rev->available; | 53 c->buffer->last += rev->available; |
52 c->buffer->end = c->buffer->start | 54 c->buffer->end = c->buffer->start |
53 + c->listening->post_accept_buffer_size; | 55 + c->listening->post_accept_buffer_size; |
54 | |
55 } else { | 56 } else { |
56 c->buffer = NULL; | 57 c->buffer = NULL; |
57 } | 58 } |
58 | 59 |
59 if (c->listening->addr_ntop) { | 60 if (c->listening->addr_ntop) { |
176 if (ngx_add_event(rev, 0, NGX_IOCP_IO) == NGX_ERROR) { | 177 if (ngx_add_event(rev, 0, NGX_IOCP_IO) == NGX_ERROR) { |
177 ngx_close_posted_connection(c); | 178 ngx_close_posted_connection(c); |
178 return NGX_ERROR; | 179 return NGX_ERROR; |
179 } | 180 } |
180 | 181 |
181 if (acceptex(ls->fd, s, c->buffer->pos, ls->post_accept_buffer_size, | 182 if (ngx_acceptex(ls->fd, s, c->buffer->pos, ls->post_accept_buffer_size, |
182 ls->socklen + 16, ls->socklen + 16, | 183 ls->socklen + 16, ls->socklen + 16, |
183 &rcvd, (LPOVERLAPPED) &rev->ovlp) == 0) | 184 &rcvd, (LPOVERLAPPED) &rev->ovlp) |
185 == 0) | |
184 { | 186 { |
185 | |
186 err = ngx_socket_errno; | 187 err = ngx_socket_errno; |
187 if (err != WSA_IO_PENDING) { | 188 if (err != WSA_IO_PENDING) { |
188 ngx_log_error(NGX_LOG_ALERT, &ls->log, err, | 189 ngx_log_error(NGX_LOG_ALERT, &ls->log, err, |
189 "AcceptEx() %V falied", &ls->addr_text); | 190 "AcceptEx() %V falied", &ls->addr_text); |
190 | 191 |