inetd: make it NOMMU-capable and IPv6-friendly. Lots of renames
of variable/function names

Total: -2474 bytes
   text    data     bss     dec     hex filename
 802215     661    7452  810328   c5d58 busybox_old
 800120     661    7428  808209   c5511 busybox_unstripped

diff --git a/libbb/create_icmp6_socket.c b/libbb/create_icmp6_socket.c
index 51899cd..a22ac5d 100644
--- a/libbb/create_icmp6_socket.c
+++ b/libbb/create_icmp6_socket.c
@@ -2,27 +2,26 @@
 /*
  * Utility routines.
  *
- * create raw socket for icmp (IPv6 version) protocol test permission
+ * create raw socket for icmp (IPv6 version) protocol
  * and drop root privileges if running setuid
- *
  */
 
-//#include <sys/types.h>
-//#include <netdb.h>
-//#include <sys/socket.h>
 #include "libbb.h"
 
 #if ENABLE_FEATURE_IPV6
 int create_icmp6_socket(void)
 {
-	struct protoent *proto;
 	int sock;
-
+#if 0
+	struct protoent *proto;
 	proto = getprotobyname("ipv6-icmp");
 	/* if getprotobyname failed, just silently force
 	 * proto->p_proto to have the correct value for "ipv6-icmp" */
 	sock = socket(AF_INET6, SOCK_RAW,
 			(proto ? proto->p_proto : IPPROTO_ICMPV6));
+#else
+	sock = socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6);
+#endif
 	if (sock < 0) {
 		if (errno == EPERM)
 			bb_error_msg_and_die(bb_msg_perm_denied_are_you_root);
diff --git a/libbb/create_icmp_socket.c b/libbb/create_icmp_socket.c
index 3a46558..64beba8 100644
--- a/libbb/create_icmp_socket.c
+++ b/libbb/create_icmp_socket.c
@@ -2,26 +2,25 @@
 /*
  * Utility routines.
  *
- * create raw socket for icmp protocol test permission
+ * create raw socket for icmp protocol
  * and drop root privileges if running setuid
- *
  */
 
-//#include <sys/types.h>
-//#include <netdb.h>
-//#include <sys/socket.h>
 #include "libbb.h"
 
 int create_icmp_socket(void)
 {
-	struct protoent *proto;
 	int sock;
-
+#if 0
+	struct protoent *proto;
 	proto = getprotobyname("icmp");
 	/* if getprotobyname failed, just silently force
 	 * proto->p_proto to have the correct value for "icmp" */
 	sock = socket(AF_INET, SOCK_RAW,
 			(proto ? proto->p_proto : 1)); /* 1 == ICMP */
+#else
+	sock = socket(AF_INET, SOCK_RAW, 1); /* 1 == ICMP */
+#endif
 	if (sock < 0) {
 		if (errno == EPERM)
 			bb_error_msg_and_die(bb_msg_perm_denied_are_you_root);
diff --git a/libbb/xconnect.c b/libbb/xconnect.c
index 03ae773..950aee8 100644
--- a/libbb/xconnect.c
+++ b/libbb/xconnect.c
@@ -132,11 +132,15 @@
 
 	/* Ugly parsing of host:addr */
 	if (ENABLE_FEATURE_IPV6 && host[0] == '[') {
+		/* Even uglier parsing of [xx]:nn */
 		host++;
 		cp = strchr(host, ']');
-		if (!cp || cp[1] != ':') /* Malformed: must have [xx]:nn */
-			bb_error_msg_and_die("bad address '%s'", org_host);
-			//return r; /* return NULL */
+		if (!cp || cp[1] != ':') { /* Malformed: must have [xx]:nn */
+			bb_error_msg("bad address '%s'", org_host);
+			if (ai_flags & DIE_ON_ERROR)
+				xfunc_die();
+			return NULL;
+		}
 	} else {
 		cp = strrchr(host, ':');
 		if (ENABLE_FEATURE_IPV6 && cp && strchr(host, ':') != cp) {
@@ -144,13 +148,19 @@
 			cp = NULL; /* it's not a port spec */
 		}
 	}
-	if (cp) {
+	if (cp) { /* points to ":" or "]:" */
 		int sz = cp - host + 1;
 		host = safe_strncpy(alloca(sz), host, sz);
 		if (ENABLE_FEATURE_IPV6 && *cp != ':')
 			cp++; /* skip ']' */
 		cp++; /* skip ':' */
-		port = xatou16(cp);
+		port = bb_strtou(cp, NULL, 10);
+		if (errno || (unsigned)port > 0xffff) {
+			bb_error_msg("bad port spec '%s'", org_host);
+			if (ai_flags & DIE_ON_ERROR)
+				xfunc_die();
+			return NULL;
+		}
 	}
 
 	memset(&hint, 0 , sizeof(hint));
@@ -221,6 +231,7 @@
 	return str2sockaddr(host, port, AF_UNSPEC, AI_NUMERICHOST | DIE_ON_ERROR);
 }
 
+#undef xsocket_type
 int xsocket_type(len_and_sockaddr **lsap, USE_FEATURE_IPV6(int family,) int sock_type)
 {
 	SKIP_FEATURE_IPV6(enum { family = AF_INET };)