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