Mercurial > hg > nginx
comparison src/core/ngx_connection.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 | 090a78da4f88 |
children | 631753428ecb |
comparison
equal
deleted
inserted
replaced
6558:68854ce64ec7 | 6559:adf25b8d0431 |
---|---|
149 #endif | 149 #endif |
150 | 150 |
151 ls = cycle->listening.elts; | 151 ls = cycle->listening.elts; |
152 for (i = 0; i < cycle->listening.nelts; i++) { | 152 for (i = 0; i < cycle->listening.nelts; i++) { |
153 | 153 |
154 ls[i].sockaddr = ngx_palloc(cycle->pool, NGX_SOCKADDRLEN); | 154 ls[i].sockaddr = ngx_palloc(cycle->pool, sizeof(ngx_sockaddr_t)); |
155 if (ls[i].sockaddr == NULL) { | 155 if (ls[i].sockaddr == NULL) { |
156 return NGX_ERROR; | 156 return NGX_ERROR; |
157 } | 157 } |
158 | 158 |
159 ls[i].socklen = NGX_SOCKADDRLEN; | 159 ls[i].socklen = sizeof(ngx_sockaddr_t); |
160 if (getsockname(ls[i].fd, ls[i].sockaddr, &ls[i].socklen) == -1) { | 160 if (getsockname(ls[i].fd, ls[i].sockaddr, &ls[i].socklen) == -1) { |
161 ngx_log_error(NGX_LOG_CRIT, cycle->log, ngx_socket_errno, | 161 ngx_log_error(NGX_LOG_CRIT, cycle->log, ngx_socket_errno, |
162 "getsockname() of the inherited " | 162 "getsockname() of the inherited " |
163 "socket #%d failed", ls[i].fd); | 163 "socket #%d failed", ls[i].fd); |
164 ls[i].ignore = 1; | 164 ls[i].ignore = 1; |
1276 ngx_connection_local_sockaddr(ngx_connection_t *c, ngx_str_t *s, | 1276 ngx_connection_local_sockaddr(ngx_connection_t *c, ngx_str_t *s, |
1277 ngx_uint_t port) | 1277 ngx_uint_t port) |
1278 { | 1278 { |
1279 socklen_t len; | 1279 socklen_t len; |
1280 ngx_uint_t addr; | 1280 ngx_uint_t addr; |
1281 u_char sa[NGX_SOCKADDRLEN]; | 1281 ngx_sockaddr_t sa; |
1282 struct sockaddr_in *sin; | 1282 struct sockaddr_in *sin; |
1283 #if (NGX_HAVE_INET6) | 1283 #if (NGX_HAVE_INET6) |
1284 ngx_uint_t i; | 1284 ngx_uint_t i; |
1285 struct sockaddr_in6 *sin6; | 1285 struct sockaddr_in6 *sin6; |
1286 #endif | 1286 #endif |
1314 } | 1314 } |
1315 } | 1315 } |
1316 | 1316 |
1317 if (addr == 0) { | 1317 if (addr == 0) { |
1318 | 1318 |
1319 len = NGX_SOCKADDRLEN; | 1319 len = sizeof(ngx_sockaddr_t); |
1320 | 1320 |
1321 if (getsockname(c->fd, (struct sockaddr *) &sa, &len) == -1) { | 1321 if (getsockname(c->fd, &sa.sockaddr, &len) == -1) { |
1322 ngx_connection_error(c, ngx_socket_errno, "getsockname() failed"); | 1322 ngx_connection_error(c, ngx_socket_errno, "getsockname() failed"); |
1323 return NGX_ERROR; | 1323 return NGX_ERROR; |
1324 } | 1324 } |
1325 | 1325 |
1326 c->local_sockaddr = ngx_palloc(c->pool, len); | 1326 c->local_sockaddr = ngx_palloc(c->pool, len); |