[master] 1aa928f Rewrite the mgt_acceptor code to use suckaddrs

Poul-Henning Kamp phk at FreeBSD.org
Thu Mar 12 00:59:16 CET 2015


commit 1aa928fe2fe35eb7ce5e2d9c6e4585e8373f743a
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Wed Mar 11 23:42:14 2015 +0000

    Rewrite the mgt_acceptor code to use suckaddrs

diff --git a/bin/varnishd/common/heritage.h b/bin/varnishd/common/heritage.h
index b62a6ca..0321e2b 100644
--- a/bin/varnishd/common/heritage.h
+++ b/bin/varnishd/common/heritage.h
@@ -30,6 +30,7 @@
  */
 
 struct vsm_sc;
+struct suckaddr;
 
 struct listen_sock {
 	unsigned			magic;
@@ -37,7 +38,7 @@ struct listen_sock {
 	VTAILQ_ENTRY(listen_sock)	list;
 	int				sock;
 	char				*name;
-	struct vss_addr			*addr;
+	struct suckaddr			*addr;
 };
 
 VTAILQ_HEAD(listen_sock_head, listen_sock);
diff --git a/bin/varnishd/mgt/mgt_acceptor.c b/bin/varnishd/mgt/mgt_acceptor.c
index 6c2402f..310b614 100644
--- a/bin/varnishd/mgt/mgt_acceptor.c
+++ b/bin/varnishd/mgt/mgt_acceptor.c
@@ -31,6 +31,9 @@
 
 #include "config.h"
 
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <fcntl.h>
 #include <fcntl.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -43,7 +46,9 @@
 #include "common/params.h"
 
 #include "vav.h"
+#include "vsa.h"
 #include "vss.h"
+#include "vtcp.h"
 
 /*=====================================================================
  * Open and close the accept sockets.
@@ -63,7 +68,7 @@ MAC_open_sockets(void)
 			good++;
 			continue;
 		}
-		ls->sock = VSS_bind(ls->addr);
+		ls->sock = VTCP_bind(ls->addr, NULL);
 		if (ls->sock < 0)
 			continue;
 
@@ -109,14 +114,32 @@ clean_listen_sock_head(struct listen_sock_head *lsh)
 	}
 }
 
+static struct listen_sock_head lsh;
+
+static int __match_proto__(vss_resolver_f)
+tla_callback(void *priv, const struct suckaddr *sa)
+{
+	struct listen_sock *ls;
+
+	ALLOC_OBJ(ls, LISTEN_SOCK_MAGIC);
+	AN(ls);
+	ls->sock = -1;
+	ls->addr = VSA_Clone(sa);
+	AN(ls->addr);
+	ls->name = strdup(priv);
+	AN(ls->name);
+	VTAILQ_INSERT_TAIL(&lsh, ls, list);
+	return (0);
+}
+
 int
 tweak_listen_address(struct vsb *vsb, const struct parspec *par,
     const char *arg)
 {
 	char **av;
-	int i, retval = 0;
-	struct listen_sock		*ls;
-	struct listen_sock_head		lsh;
+	int i, error;
+	const char *err;
+	struct listen_sock *ls;
 
 	(void)par;
 	if (arg == NULL) {
@@ -141,31 +164,16 @@ tweak_listen_address(struct vsb *vsb, const struct parspec *par,
 	}
 	VTAILQ_INIT(&lsh);
 	for (i = 1; av[i] != NULL; i++) {
-		struct vss_addr **ta;
-		int j, n;
-
-		n = VSS_resolve(av[i], "http", &ta);
-		if (n == 0) {
+		error = VSS_resolver(av[i], "http", tla_callback, av[i], &err);
+		if (err != NULL) {
 			VSB_printf(vsb, "Invalid listen address ");
 			VSB_quote(vsb, av[i], -1, 0);
-			retval = -1;
-			break;
-		}
-		for (j = 0; j < n; ++j) {
-			ALLOC_OBJ(ls, LISTEN_SOCK_MAGIC);
-			AN(ls);
-			ls->sock = -1;
-			ls->addr = ta[j];
-			ls->name = strdup(av[i]);
-			AN(ls->name);
-			VTAILQ_INSERT_TAIL(&lsh, ls, list);
+			VSB_printf(vsb, ": %s", err);
+			VAV_Free(av);
+			clean_listen_sock_head(&lsh);
+			return (-1);
 		}
-		free(ta);
-	}
-	VAV_Free(av);
-	if (retval) {
-		clean_listen_sock_head(&lsh);
-		return (-1);
+		AZ(error);
 	}
 
 	REPLACE(mgt_param.listen_address, arg);



More information about the varnish-commit mailing list