+ return NULL;
+}
+
+/*
+ * i host = 0 mean INADDR_ANY only ipv4
+ */
+dlist *bnet_host2ipaddrs(const char *host, int family, const char **errstr)
+{
+ struct in_addr inaddr;
+ IPADDR *addr = 0;
+ const char *errmsg;
+#ifdef HAVE_IPV6
+ struct in6_addr inaddr6;
+#endif
+
+ dlist *addr_list = New(dlist(addr, &addr->link));
+ if (!host || host[0] == '\0') {
+ if (family != 0) {
+ addr_list->append(add_any(family));
+ } else {
+ addr_list->append(add_any(AF_INET));
+#ifdef HAVE_IPV6
+ addr_list->append(add_any(AF_INET6));
+#endif
+ }
+ } else if (inet_aton(host, &inaddr)) { /* MA Bug 4 */
+ addr = New(IPADDR(AF_INET));
+ addr->set_type(IPADDR::R_MULTIPLE);
+ addr->set_addr4(&inaddr);
+ addr_list->append(addr);
+ } else
+#ifdef HAVE_IPV6
+ if (inet_pton(AF_INET6, host, &inaddr6) > 1) {
+ addr = New(IPADDR(AF_INET6));
+ addr->set_type(IPADDR::R_MULTIPLE);
+ addr->set_addr6(&inaddr6);
+ addr_list->append(addr);
+ } else
+#endif
+ {
+ if (family != 0) {
+ errmsg = resolv_host(family, host, addr_list);
+ if (errmsg) {
+ *errstr = errmsg;
+ free_addresses(addr_list);
+ return 0;
+ }
+ } else {
+ errmsg = resolv_host(AF_INET, host, addr_list);
+#ifdef HAVE_IPV6
+ if (errmsg) {
+ errmsg = resolv_host(AF_INET6, host, addr_list);
+ }
+#endif
+ if (errmsg) {
+ *errstr = errmsg;
+ free_addresses(addr_list);
+ return 0;
+ }
+ }
+ }