Skip to content

Commit

Permalink
Core: make ngx_connection_local_sockaddr() always assign address.
Browse files Browse the repository at this point in the history
Previously, this function checked for connection local address existence
and returned error if it was missing.  Now a new address is assigned in this
case making it possible to call this function not only for accepted connections.
  • Loading branch information
arut committed Feb 17, 2015
1 parent 7f3f7fe commit 6337c1d
Showing 1 changed file with 17 additions and 17 deletions.
34 changes: 17 additions & 17 deletions src/core/ngx_connection.c
Original file line number Diff line number Diff line change
Expand Up @@ -1073,33 +1073,33 @@ ngx_connection_local_sockaddr(ngx_connection_t *c, ngx_str_t *s,
struct sockaddr_in6 *sin6;
#endif

if (c->local_socklen == 0) {
return NGX_ERROR;
}
addr = 0;

switch (c->local_sockaddr->sa_family) {
if (c->local_socklen) {
switch (c->local_sockaddr->sa_family) {

#if (NGX_HAVE_INET6)
case AF_INET6:
sin6 = (struct sockaddr_in6 *) c->local_sockaddr;
case AF_INET6:
sin6 = (struct sockaddr_in6 *) c->local_sockaddr;

for (addr = 0, i = 0; addr == 0 && i < 16; i++) {
addr |= sin6->sin6_addr.s6_addr[i];
}
for (i = 0; addr == 0 && i < 16; i++) {
addr |= sin6->sin6_addr.s6_addr[i];
}

break;
break;
#endif

#if (NGX_HAVE_UNIX_DOMAIN)
case AF_UNIX:
addr = 1;
break;
case AF_UNIX:
addr = 1;
break;
#endif

default: /* AF_INET */
sin = (struct sockaddr_in *) c->local_sockaddr;
addr = sin->sin_addr.s_addr;
break;
default: /* AF_INET */
sin = (struct sockaddr_in *) c->local_sockaddr;
addr = sin->sin_addr.s_addr;
break;
}
}

if (addr == 0) {
Expand Down

0 comments on commit 6337c1d

Please sign in to comment.