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;