changeset 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 956edecaedeb
files src/core/ngx_resolver.c
diffstat 1 files changed, 9 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/core/ngx_resolver.c
+++ b/src/core/ngx_resolver.c
@@ -96,7 +96,7 @@ ngx_resolver_create(ngx_conf_t *cf, ngx_
 {
     ngx_str_t              s;
     ngx_url_t              u;
-    ngx_uint_t             i;
+    ngx_uint_t             i, j;
     ngx_resolver_t        *r;
     ngx_pool_cleanup_t    *cln;
     ngx_udp_connection_t  *uc;
@@ -184,16 +184,18 @@ ngx_resolver_create(ngx_conf_t *cf, ngx_
             return NULL;
         }
 
-        uc = ngx_array_push(&r->udp_connections);
+        uc = ngx_array_push_n(&r->udp_connections, u.naddrs);
         if (uc == NULL) {
             return NULL;
         }
 
-        ngx_memzero(uc, sizeof(ngx_udp_connection_t));
-
-        uc->sockaddr = u.addrs->sockaddr;
-        uc->socklen = u.addrs->socklen;
-        uc->server = u.addrs->name;
+        ngx_memzero(uc, u.naddrs * sizeof(ngx_udp_connection_t));
+
+        for (j = 0; j < u.naddrs; j++) {
+            uc[j].sockaddr = u.addrs[j].sockaddr;
+            uc[j].socklen = u.addrs[j].socklen;
+            uc[j].server = u.addrs[j].name;
+        }
     }
 
     return r;