[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