diff --git a/contrib/src/opendht/SHA512SUMS b/contrib/src/opendht/SHA512SUMS
index 655f36e2edeb984b16ec2ed982ffdf4cf27a0df0..cc4f242bf6acbdde7b8941e3cb8c11e38fdd18c8 100644
--- a/contrib/src/opendht/SHA512SUMS
+++ b/contrib/src/opendht/SHA512SUMS
@@ -1 +1 @@
-af2a3be1305a47043b932339545da7c947266e3120b6bedea3d5c837c5a6d4eb55d85a3008ba0ca7e90501a2c4ca9bc84c3c3d7fb1b0f8e2a6bcd0d5fe1ba3dd  opendht-fcaaa01b2d40011df650cd092cb841e825c4e49c.tar.gz
+eb2ffc2662cd981a552ae19109260a2d675de748906f5e1037b85fe123cfbd2b4a714ef1428444f69828d5cd2405f7cb70cd53ad36c71b298d9930c49fca16ba  opendht-1.5.0.tar.gz
diff --git a/contrib/src/opendht/fetch_and_patch.bat b/contrib/src/opendht/fetch_and_patch.bat
index db3bf9815e6fc077fe5a258725afdf8ff43ba54d..0678217de4906de347c2aa2fdd60a4eecf6586be 100644
--- a/contrib/src/opendht/fetch_and_patch.bat
+++ b/contrib/src/opendht/fetch_and_patch.bat
@@ -1,6 +1,6 @@
 set BUILD=%SRC%..\build
 
-set OPENDHT_VERSION=fcaaa01b2d40011df650cd092cb841e825c4e49c
+set OPENDHT_VERSION=1.5.0
 set OPENDHT_URL=https://github.com/savoirfairelinux/opendht/archive/%OPENDHT_VERSION%.tar.gz
 
 mkdir %BUILD%
@@ -19,4 +19,4 @@ cd %BUILD%\opendht
 
 git apply --reject --whitespace=fix %SRC%\opendht\opendht-uwp.patch
 
-cd %SRC%
\ No newline at end of file
+cd %SRC%
diff --git a/contrib/src/opendht/rules.mak b/contrib/src/opendht/rules.mak
index 981e806dee792fc57d40d88e1ab2947e2dfa3935..4443a6fc03c47353aa4a5adeab539fbe6f19acf7 100644
--- a/contrib/src/opendht/rules.mak
+++ b/contrib/src/opendht/rules.mak
@@ -1,5 +1,5 @@
 # OPENDHT
-OPENDHT_VERSION := fcaaa01b2d40011df650cd092cb841e825c4e49c
+OPENDHT_VERSION := 1.5.0
 OPENDHT_URL := https://github.com/savoirfairelinux/opendht/archive/$(OPENDHT_VERSION).tar.gz
 
 PKGS += opendht
diff --git a/src/ringdht/ringaccount.cpp b/src/ringdht/ringaccount.cpp
index 796b81ed04cd736cb73f527d34f3787dd55d2f79..65c1106e76e8750ad7461dd82e94aba16d780e1f 100644
--- a/src/ringdht/ringaccount.cpp
+++ b/src/ringdht/ringaccount.cpp
@@ -1848,32 +1848,33 @@ RingAccount::doRegister()
 }
 
 
-std::vector<std::pair<sockaddr_storage, socklen_t>>
+std::vector<dht::SockAddr>
 RingAccount::loadBootstrap() const
 {
-    std::vector<std::pair<sockaddr_storage, socklen_t>> bootstrap;
+    std::vector<dht::SockAddr> bootstrap;
     if (!hostname_.empty()) {
         std::stringstream ss(hostname_);
         std::string node_addr;
         while (std::getline(ss, node_addr, ';')) {
-            auto ips = ip_utils::getAddrList(node_addr);
+            auto ips = dht::SockAddr::resolve(node_addr);
             if (ips.empty()) {
                 IpAddr resolved(node_addr);
                 if (resolved) {
                     if (resolved.getPort() == 0)
                         resolved.setPort(DHT_DEFAULT_PORT);
-                    bootstrap.emplace_back(resolved, resolved.getLength());
+                    bootstrap.emplace_back(static_cast<const sockaddr*>(resolved), resolved.getLength());
                 }
             } else {
+                bootstrap.reserve(bootstrap.size() + ips.size());
                 for (auto& ip : ips) {
                     if (ip.getPort() == 0)
                         ip.setPort(DHT_DEFAULT_PORT);
-                    bootstrap.emplace_back(ip, ip.getLength());
+                    bootstrap.emplace_back(std::move(ip));
                 }
             }
         }
-        for (auto ip : bootstrap)
-            RING_DBG("Bootstrap node: %s", IpAddr(ip.first).toString(true).c_str());
+        for (const auto& ip : bootstrap)
+            RING_DBG("Bootstrap node: %s", ip.toString().c_str());
     }
     return bootstrap;
 }
diff --git a/src/ringdht/ringaccount.h b/src/ringdht/ringaccount.h
index d5eb8a0a91e3578648438c949be469e8454914e3..e0769f889e024f6b8a8d6bb1815fc31a0eefbeb9 100644
--- a/src/ringdht/ringaccount.h
+++ b/src/ringdht/ringaccount.h
@@ -505,7 +505,7 @@ class RingAccount : public SIPAccountBase {
         void updateArchive(AccountArchive& content) const;
         void saveArchive(AccountArchive& content, const std::string& pwd);
         AccountArchive readArchive(const std::string& pwd) const;
-        std::vector<std::pair<sockaddr_storage, socklen_t>> loadBootstrap() const;
+        std::vector<dht::SockAddr> loadBootstrap() const;
 
         static std::pair<std::string, std::string> saveIdentity(const dht::crypto::Identity id, const std::string& path, const std::string& name);
         void saveNodes(const std::vector<dht::NodeExport>&) const;