--- dcpp/Util.cpp	2015-04-20 02:57:16.000000000 +0500
+++ dcpp/Util.cpp.new	2017-10-09 15:00:00.000000000 +0500
@@ -171,8 +171,8 @@
     ::GetShortPathName(localePath_.c_str(), buf, sizeof(buf)/sizeof(TCHAR));
     if (Util::getPath(Util::PATH_LOCALE).empty())
         paths[PATH_LOCALE] = Text::fromT(buf);
-    if (Util::getPath(Util::PATH_DOWNLOADS).empty())
-        paths[PATH_DOWNLOADS] = getDownloadsPath(paths[PATH_USER_CONFIG]);
+    //if (Util::getPath(Util::PATH_DOWNLOADS).empty())
+    //    paths[PATH_DOWNLOADS] = getDownloadsPath(paths[PATH_USER_CONFIG]);
 
 #else
     if (Util::getPath(Util::PATH_GLOBAL_CONFIG).empty())
@@ -704,7 +704,7 @@
 #endif
 }
 
-vector<string> Util::getLocalIPs() {
+vector<string> Util::getLocalIPs(unsigned short sa_family) {
     vector<string> addresses;
 
 #ifdef HAVE_IFADDRS_H
@@ -712,6 +712,9 @@
 
     if (getifaddrs(&ifap) == 0)
     {
+        bool ipv4 = (sa_family == AF_UNSPEC) || (sa_family == AF_INET);
+        bool ipv6 = (sa_family == AF_UNSPEC) || (sa_family == AF_INET6);
+
         for (struct ifaddrs *i = ifap; i != NULL; i = i->ifa_next)
         {
             struct sockaddr *sa = i->ifa_addr;
@@ -723,14 +726,14 @@
                 socklen_t len;
 
                 // IPv4 address
-                if (sa->sa_family == AF_INET)
+                if (ipv4 && (sa->sa_family == AF_INET))
                 {
                     struct sockaddr_in* sai = (struct sockaddr_in*)sa;
                     src = (void*) &(sai->sin_addr);
                     len = INET_ADDRSTRLEN;
                 }
                 // IPv6 address
-                else if (sa->sa_family == AF_INET6)
+                else if (ipv6 && (sa->sa_family == AF_INET6))
                 {
                     struct sockaddr_in6* sai6 = (struct sockaddr_in6*)sa;
                     src = (void*) &(sai6->sin6_addr);
@@ -752,9 +755,13 @@
 
     return addresses;
 }
-string Util::getLocalIp() {
+string Util::getLocalIp(unsigned short as_family) {
 #ifdef HAVE_IFADDRS_H
-    return getLocalIPs().empty() ? "0.0.0.0" : getLocalIPs()[0];
+    vector<string> addresses = getLocalIPs(as_family);
+    if (addresses.empty())
+        return (((as_family == AF_UNSPEC) || (as_family == AF_INET)) ? "0.0.0.0" : "::");
+
+    return addresses[0];
 #else
     string tmp;
 
