[PATCH] Allow multiple identical backend addresses
Tollef Fog Heen
tfheen at varnish-software.com
Tue Nov 20 09:51:04 CET 2012
In some cases, lookups for a given host name returns the same address
multiple times. Allow this, but ignore any duplicate addresses.
---
lib/libvcl/vcc_backend.c | 38 +++++++++++++++++++++++++++-----------
1 file changed, 27 insertions(+), 11 deletions(-)
diff --git a/lib/libvcl/vcc_backend.c b/lib/libvcl/vcc_backend.c
index 78cb0b2..5cc98ae 100644
--- a/lib/libvcl/vcc_backend.c
+++ b/lib/libvcl/vcc_backend.c
@@ -106,7 +106,7 @@ Emit_Sockaddr(struct vcc *tl, const struct token *t_host, const char *port)
struct addrinfo *res, *res0, *res1, hint;
int n4, n6, error, retval, x;
const char *emit, *multiple;
- char hbuf[NI_MAXHOST];
+ char hbuf[NI_MAXHOST], v4[NI_MAXHOST], v6[NI_MAXHOST];
char *hop, *pop;
AN(t_host->dec);
@@ -145,16 +145,36 @@ Emit_Sockaddr(struct vcc *tl, const struct token *t_host, const char *port)
for (res = res0; res; res = res->ai_next) {
emit = NULL;
+
+ error = getnameinfo(res->ai_addr,
+ res->ai_addrlen, hbuf, sizeof hbuf,
+ NULL, 0, NI_NUMERICHOST);
+ AZ(error);
+
if (res->ai_family == PF_INET) {
- if (n4++ == 0)
+ if (n4++ == 0) {
emit = "ipv4";
- else
- multiple = "IPv4";
+ strcpy(v4, hbuf);
+ } else {
+ if (strcmp(v4, hbuf) != 0) {
+ multiple = "IPv4";
+ } else {
+ /* Ignore duplicate address */
+ continue;
+ }
+ }
} else if (res->ai_family == PF_INET6) {
- if (n6++ == 0)
+ if (n6++ == 0) {
emit = "ipv6";
- else
- multiple = "IPv6";
+ strcpy(v6, hbuf);
+ } else {
+ if (strcmp(v6, hbuf) != 0) {
+ multiple = "IPv6";
+ } else {
+ /* Ignore duplicate address */
+ continue;
+ }
+ }
} else
continue;
@@ -179,10 +199,6 @@ Emit_Sockaddr(struct vcc *tl, const struct token *t_host, const char *port)
AN(emit);
x = emit_sockaddr(tl, res->ai_addr, res->ai_addrlen);
Fb(tl, 0, "\t.%s_sockaddr = sockaddr%u,\n", emit, x);
- error = getnameinfo(res->ai_addr,
- res->ai_addrlen, hbuf, sizeof hbuf,
- NULL, 0, NI_NUMERICHOST);
- AZ(error);
Fb(tl, 0, "\t.%s_addr = \"%s\",\n", emit, hbuf);
retval++;
}
--
1.7.10.4
More information about the varnish-dev
mailing list