Mercurial > hg > nginx
comparison src/core/ngx_connection.c @ 5983:69c4912066a4
Core: make ngx_connection_local_sockaddr() always assign address.
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.
author | Roman Arutyunyan <arut@nginx.com> |
---|---|
date | Tue, 17 Feb 2015 14:26:44 +0300 |
parents | 3f5f0ab59b35 |
children | 457ec43dd8d5 |
comparison
equal
deleted
inserted
replaced
5982:f3f25ad09dee | 5983:69c4912066a4 |
---|---|
1071 #if (NGX_HAVE_INET6) | 1071 #if (NGX_HAVE_INET6) |
1072 ngx_uint_t i; | 1072 ngx_uint_t i; |
1073 struct sockaddr_in6 *sin6; | 1073 struct sockaddr_in6 *sin6; |
1074 #endif | 1074 #endif |
1075 | 1075 |
1076 if (c->local_socklen == 0) { | 1076 addr = 0; |
1077 return NGX_ERROR; | 1077 |
1078 } | 1078 if (c->local_socklen) { |
1079 | 1079 switch (c->local_sockaddr->sa_family) { |
1080 switch (c->local_sockaddr->sa_family) { | |
1081 | 1080 |
1082 #if (NGX_HAVE_INET6) | 1081 #if (NGX_HAVE_INET6) |
1083 case AF_INET6: | 1082 case AF_INET6: |
1084 sin6 = (struct sockaddr_in6 *) c->local_sockaddr; | 1083 sin6 = (struct sockaddr_in6 *) c->local_sockaddr; |
1085 | 1084 |
1086 for (addr = 0, i = 0; addr == 0 && i < 16; i++) { | 1085 for (i = 0; addr == 0 && i < 16; i++) { |
1087 addr |= sin6->sin6_addr.s6_addr[i]; | 1086 addr |= sin6->sin6_addr.s6_addr[i]; |
1088 } | 1087 } |
1089 | 1088 |
1090 break; | 1089 break; |
1091 #endif | 1090 #endif |
1092 | 1091 |
1093 #if (NGX_HAVE_UNIX_DOMAIN) | 1092 #if (NGX_HAVE_UNIX_DOMAIN) |
1094 case AF_UNIX: | 1093 case AF_UNIX: |
1095 addr = 1; | 1094 addr = 1; |
1096 break; | 1095 break; |
1097 #endif | 1096 #endif |
1098 | 1097 |
1099 default: /* AF_INET */ | 1098 default: /* AF_INET */ |
1100 sin = (struct sockaddr_in *) c->local_sockaddr; | 1099 sin = (struct sockaddr_in *) c->local_sockaddr; |
1101 addr = sin->sin_addr.s_addr; | 1100 addr = sin->sin_addr.s_addr; |
1102 break; | 1101 break; |
1102 } | |
1103 } | 1103 } |
1104 | 1104 |
1105 if (addr == 0) { | 1105 if (addr == 0) { |
1106 | 1106 |
1107 len = NGX_SOCKADDRLEN; | 1107 len = NGX_SOCKADDRLEN; |