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