comparison src/core/ngx_resolver.c @ 4684:f5c2c9d656f9

When "resolver" is configured with a domain name, only the first resolved address was used. Now all addresses will be used.
author Ruslan Ermilov <ru@nginx.com>
date Mon, 18 Jun 2012 12:46:05 +0000
parents 84d8e60b65f0
children dd63abf20ba7
comparison
equal deleted inserted replaced
4683:84d8e60b65f0 4684:f5c2c9d656f9
94 ngx_resolver_t * 94 ngx_resolver_t *
95 ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names, ngx_uint_t n) 95 ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names, ngx_uint_t n)
96 { 96 {
97 ngx_str_t s; 97 ngx_str_t s;
98 ngx_url_t u; 98 ngx_url_t u;
99 ngx_uint_t i; 99 ngx_uint_t i, j;
100 ngx_resolver_t *r; 100 ngx_resolver_t *r;
101 ngx_pool_cleanup_t *cln; 101 ngx_pool_cleanup_t *cln;
102 ngx_udp_connection_t *uc; 102 ngx_udp_connection_t *uc;
103 103
104 cln = ngx_pool_cleanup_add(cf->pool, 0); 104 cln = ngx_pool_cleanup_add(cf->pool, 0);
182 } 182 }
183 183
184 return NULL; 184 return NULL;
185 } 185 }
186 186
187 uc = ngx_array_push(&r->udp_connections); 187 uc = ngx_array_push_n(&r->udp_connections, u.naddrs);
188 if (uc == NULL) { 188 if (uc == NULL) {
189 return NULL; 189 return NULL;
190 } 190 }
191 191
192 ngx_memzero(uc, sizeof(ngx_udp_connection_t)); 192 ngx_memzero(uc, u.naddrs * sizeof(ngx_udp_connection_t));
193 193
194 uc->sockaddr = u.addrs->sockaddr; 194 for (j = 0; j < u.naddrs; j++) {
195 uc->socklen = u.addrs->socklen; 195 uc[j].sockaddr = u.addrs[j].sockaddr;
196 uc->server = u.addrs->name; 196 uc[j].socklen = u.addrs[j].socklen;
197 uc[j].server = u.addrs[j].name;
198 }
197 } 199 }
198 200
199 return r; 201 return r;
200 } 202 }
201 203