Mercurial > hg > nginx
comparison src/event/ngx_event_accept.c @ 6559:adf25b8d0431
Introduced the ngx_sockaddr_t type.
It's properly aligned and can hold any supported sockaddr.
author | Ruslan Ermilov <ru@nginx.com> |
---|---|
date | Mon, 23 May 2016 16:37:20 +0300 |
parents | 2f98b5709d79 |
children | 56fc55e32f23 |
comparison
equal
deleted
inserted
replaced
6558:68854ce64ec7 | 6559:adf25b8d0431 |
---|---|
26 ngx_err_t err; | 26 ngx_err_t err; |
27 ngx_log_t *log; | 27 ngx_log_t *log; |
28 ngx_uint_t level; | 28 ngx_uint_t level; |
29 ngx_socket_t s; | 29 ngx_socket_t s; |
30 ngx_event_t *rev, *wev; | 30 ngx_event_t *rev, *wev; |
31 ngx_sockaddr_t sa; | |
31 ngx_listening_t *ls; | 32 ngx_listening_t *ls; |
32 ngx_connection_t *c, *lc; | 33 ngx_connection_t *c, *lc; |
33 ngx_event_conf_t *ecf; | 34 ngx_event_conf_t *ecf; |
34 u_char sa[NGX_SOCKADDRLEN]; | |
35 #if (NGX_HAVE_ACCEPT4) | 35 #if (NGX_HAVE_ACCEPT4) |
36 static ngx_uint_t use_accept4 = 1; | 36 static ngx_uint_t use_accept4 = 1; |
37 #endif | 37 #endif |
38 | 38 |
39 if (ev->timedout) { | 39 if (ev->timedout) { |
56 | 56 |
57 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0, | 57 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0, |
58 "accept on %V, ready: %d", &ls->addr_text, ev->available); | 58 "accept on %V, ready: %d", &ls->addr_text, ev->available); |
59 | 59 |
60 do { | 60 do { |
61 socklen = NGX_SOCKADDRLEN; | 61 socklen = sizeof(ngx_sockaddr_t); |
62 | 62 |
63 #if (NGX_HAVE_ACCEPT4) | 63 #if (NGX_HAVE_ACCEPT4) |
64 if (use_accept4) { | 64 if (use_accept4) { |
65 s = accept4(lc->fd, (struct sockaddr *) sa, &socklen, | 65 s = accept4(lc->fd, &sa.sockaddr, &socklen, SOCK_NONBLOCK); |
66 SOCK_NONBLOCK); | |
67 } else { | 66 } else { |
68 s = accept(lc->fd, (struct sockaddr *) sa, &socklen); | 67 s = accept(lc->fd, &sa.sockaddr, &socklen); |
69 } | 68 } |
70 #else | 69 #else |
71 s = accept(lc->fd, (struct sockaddr *) sa, &socklen); | 70 s = accept(lc->fd, &sa.sockaddr, &socklen); |
72 #endif | 71 #endif |
73 | 72 |
74 if (s == (ngx_socket_t) -1) { | 73 if (s == (ngx_socket_t) -1) { |
75 err = ngx_socket_errno; | 74 err = ngx_socket_errno; |
76 | 75 |
169 if (c->sockaddr == NULL) { | 168 if (c->sockaddr == NULL) { |
170 ngx_close_accepted_connection(c); | 169 ngx_close_accepted_connection(c); |
171 return; | 170 return; |
172 } | 171 } |
173 | 172 |
174 ngx_memcpy(c->sockaddr, sa, socklen); | 173 ngx_memcpy(c->sockaddr, &sa, socklen); |
175 | 174 |
176 log = ngx_palloc(c->pool, sizeof(ngx_log_t)); | 175 log = ngx_palloc(c->pool, sizeof(ngx_log_t)); |
177 if (log == NULL) { | 176 if (log == NULL) { |
178 ngx_close_accepted_connection(c); | 177 ngx_close_accepted_connection(c); |
179 return; | 178 return; |
326 ngx_log_t *log; | 325 ngx_log_t *log; |
327 ngx_err_t err; | 326 ngx_err_t err; |
328 ngx_event_t *rev, *wev; | 327 ngx_event_t *rev, *wev; |
329 struct iovec iov[1]; | 328 struct iovec iov[1]; |
330 struct msghdr msg; | 329 struct msghdr msg; |
330 ngx_sockaddr_t sa; | |
331 ngx_listening_t *ls; | 331 ngx_listening_t *ls; |
332 ngx_event_conf_t *ecf; | 332 ngx_event_conf_t *ecf; |
333 ngx_connection_t *c, *lc; | 333 ngx_connection_t *c, *lc; |
334 u_char sa[NGX_SOCKADDRLEN]; | |
335 static u_char buffer[65535]; | 334 static u_char buffer[65535]; |
336 | 335 |
337 #if (NGX_HAVE_MSGHDR_MSG_CONTROL) | 336 #if (NGX_HAVE_MSGHDR_MSG_CONTROL) |
338 | 337 |
339 #if (NGX_HAVE_IP_RECVDSTADDR) | 338 #if (NGX_HAVE_IP_RECVDSTADDR) |
374 | 373 |
375 iov[0].iov_base = (void *) buffer; | 374 iov[0].iov_base = (void *) buffer; |
376 iov[0].iov_len = sizeof(buffer); | 375 iov[0].iov_len = sizeof(buffer); |
377 | 376 |
378 msg.msg_name = &sa; | 377 msg.msg_name = &sa; |
379 msg.msg_namelen = sizeof(sa); | 378 msg.msg_namelen = sizeof(ngx_sockaddr_t); |
380 msg.msg_iov = iov; | 379 msg.msg_iov = iov; |
381 msg.msg_iovlen = 1; | 380 msg.msg_iovlen = 1; |
382 | 381 |
383 #if (NGX_HAVE_MSGHDR_MSG_CONTROL) | 382 #if (NGX_HAVE_MSGHDR_MSG_CONTROL) |
384 | 383 |