summaryrefslogtreecommitdiff
path: root/config.c
diff options
context:
space:
mode:
Diffstat (limited to 'config.c')
-rw-r--r--config.c46
1 files changed, 11 insertions, 35 deletions
diff --git a/config.c b/config.c
index de0522e..bb107ef 100644
--- a/config.c
+++ b/config.c
@@ -103,10 +103,7 @@ strtosockaddrs(const char *str, struct list_head *list)
if (strtou16_strict(tmp, &port) < 0)
goto out;
- saddr->in6.sin6_family = AF_INET6;
- saddr->in6.sin6_port = htons(port);
- saddr->addrlen = sizeof(saddr->in6);
- saddr_set_str(saddr);
+ saddr_set_ipv6(saddr, NULL, htons(port));
} else if (*str == '*') {
/* IPv4, *:p */
@@ -124,11 +121,7 @@ strtosockaddrs(const char *str, struct list_head *list)
if (!saddr)
goto out;
- saddr->in4.sin_family = AF_INET;
- saddr->in4.sin_addr.s_addr = INADDR_ANY;
- saddr->in4.sin_port = htons(port);
- saddr->addrlen = sizeof(saddr->in4);
- saddr_set_str(saddr);
+ saddr_set_ipv4(saddr, INADDR_ANY, htons(port));
list_add(&saddr->list, list);
} else if ((tmp = strchr(str, ':'))) {
@@ -146,10 +139,7 @@ strtosockaddrs(const char *str, struct list_head *list)
if (inet_pton(AF_INET, str, &saddr->in4.sin_addr) > 0) {
debug(DBG_CFG, "got an IPv4:port (%s)\n", str);
- saddr->in4.sin_family = AF_INET;
- saddr->in4.sin_port = htons(port);
- saddr->addrlen = sizeof(saddr->in4);
- saddr_set_str(saddr);
+ saddr_set_ipv4(saddr, saddr->in4.sin_addr.s_addr, htons(port));
list_add(&saddr->list, list);
goto success;
} else {
@@ -181,27 +171,21 @@ strtosockaddrs(const char *str, struct list_head *list)
switch (ai->ai_family) {
case AF_INET: {
- struct sockaddr_in *naddr = (struct sockaddr_in *)ai->ai_addr;
+ struct sockaddr_in *in4 = (struct sockaddr_in *)ai->ai_addr;
- saddr->in4.sin_family = AF_INET;
- saddr->in4.sin_addr = naddr->sin_addr;
- saddr->in4.sin_port = naddr->sin_port;
- saddr->addrlen = sizeof(saddr->in4);
- saddr_set_str(saddr);
+ saddr_set_ipv4(saddr, in4->sin_addr.s_addr, htons(port));
list_add(&saddr->list, list);
break;
}
+
case AF_INET6: {
- struct sockaddr_in6 *naddr = (struct sockaddr_in6 *)ai->ai_addr;
+ struct sockaddr_in6 *in6 = (struct sockaddr_in6 *)ai->ai_addr;
- saddr->in6.sin6_family = AF_INET6;
- saddr->in6.sin6_addr = naddr->sin6_addr;
- saddr->in6.sin6_port = naddr->sin6_port;
- saddr->addrlen = sizeof(saddr->in6);
- saddr_set_str(saddr);
+ saddr_set_ipv6(saddr, &in6->sin6_addr, in6->sin6_port);
list_add(&saddr->list, list);
break;
}
+
default:
error("getaddrinfo(%s): unknown address family (%i)\n",
str, ai->ai_family);
@@ -220,22 +204,14 @@ strtosockaddrs(const char *str, struct list_head *list)
if (!saddr)
goto out;
- saddr->in6.sin6_family = AF_INET6;
- saddr->in6.sin6_addr = in6addr_any;
- saddr->in6.sin6_port = htons(port);
- saddr->addrlen = sizeof(saddr->in6);
- saddr_set_str(saddr);
+ saddr_set_ipv6(saddr, &in6addr_any, htons(port));
list_add(&saddr->list, list);
saddr = zmalloc(sizeof(*saddr));
if (!saddr)
goto out;
- saddr->in4.sin_family = AF_INET;
- saddr->in4.sin_addr.s_addr = INADDR_ANY;
- saddr->in4.sin_port = htons(port);
- saddr->addrlen = sizeof(saddr->in4);
- saddr_set_str(saddr);
+ saddr_set_ipv4(saddr, INADDR_ANY, htons(port));
list_add(&saddr->list, list);
} else {