From bd5738e4f41037786215b82218b4c3f08caae83a Mon Sep 17 00:00:00 2001 From: vda Date: Wed, 10 Jan 2007 20:19:56 +0000 Subject: a bit more IPv6-ization work syslogd: converted to use it (in -R host:port) git-svn-id: svn://busybox.net/trunk/busybox@17229 69ca8d6d-28ef-0310-b511-8ec308f3f277 --- libbb/xconnect.c | 31 ++++++++++--------------------- 1 file changed, 10 insertions(+), 21 deletions(-) (limited to 'libbb') diff --git a/libbb/xconnect.c b/libbb/xconnect.c index 93c3cd5c6..6e85322cf 100644 --- a/libbb/xconnect.c +++ b/libbb/xconnect.c @@ -83,25 +83,13 @@ int xconnect_tcp_v4(struct sockaddr_in *s_addr) /* "New" networking API */ -/* So far we do not expose struct and helpers to libbb */ -typedef struct len_and_sockaddr { - int len; - union { - struct sockaddr sa; - struct sockaddr_in sin; -#if ENABLE_FEATURE_IPV6 - struct sockaddr_in6 sin6; -#endif - }; -} len_and_sockaddr; //extern int xsocket_stream_ip4or6(sa_family_t *fp); -//extern len_and_sockaddr* host2sockaddr(const char *host, int def_port); //extern len_and_sockaddr* dotted2sockaddr(const char *dotted, int def_port); /* peer: "1.2.3.4[:port]", "www.google.com[:port]" - * def_port: if neither of above specifies port # + * port: if neither of above specifies port # */ -static len_and_sockaddr* str2sockaddr(const char *host, int def_port, int ai_flags) +static len_and_sockaddr* str2sockaddr(const char *host, int port, int ai_flags) { int rc; len_and_sockaddr *r; // = NULL; @@ -126,12 +114,13 @@ static len_and_sockaddr* str2sockaddr(const char *host, int def_port, int ai_fla } } if (cp) { - host = safe_strncpy(alloca(cp - host + 1), host, cp - host); + int sz = cp - host + 1; + host = safe_strncpy(alloca(sz), host, sz); if (ENABLE_FEATURE_IPV6 && *cp != ':') cp++; /* skip ']' */ cp++; /* skip ':' */ } else { - utoa_to_buf(def_port, service, sizeof(service)); + utoa_to_buf(port, service, sizeof(service)); cp = service; } @@ -154,14 +143,14 @@ static len_and_sockaddr* str2sockaddr(const char *host, int def_port, int ai_fla return r; } -static len_and_sockaddr* host2sockaddr(const char *host, int def_port) +len_and_sockaddr* host2sockaddr(const char *host, int port) { - return str2sockaddr(host, def_port, 0); + return str2sockaddr(host, port, 0); } -static len_and_sockaddr* dotted2sockaddr(const char *host, int def_port) +static len_and_sockaddr* dotted2sockaddr(const char *host, int port) { - return str2sockaddr(host, def_port, NI_NUMERICHOST); + return str2sockaddr(host, port, NI_NUMERICHOST); } static int xsocket_stream_ip4or6(len_and_sockaddr *lsa) @@ -185,7 +174,7 @@ int create_and_bind_stream_or_die(const char *bindaddr, int port) int fd; len_and_sockaddr *lsa; - if (bindaddr) { + if (bindaddr && bindaddr[0]) { lsa = dotted2sockaddr(bindaddr, port); /* currently NULL check is in str2sockaddr */ //if (!lsa) -- cgit v1.2.3-55-g6feb