diff --git a/include/opendht/dhtrunner.h b/include/opendht/dhtrunner.h index bbe13b8cc71286097b67807021d8fc3fbff2e62a..956d2158b5912fff61cd3e71f44d44b25656be41 100644 --- a/include/opendht/dhtrunner.h +++ b/include/opendht/dhtrunner.h @@ -79,7 +79,7 @@ public: void putEncrypted(InfoHash hash, InfoHash to, Value&& value, Dht::DoneCallback cb=nullptr); void putEncrypted(const std::string& key, InfoHash to, Value&& value, Dht::DoneCallback cb=nullptr); - void bootstrap(const std::vector<sockaddr_storage>& nodes); + void bootstrap(const std::vector<std::pair<sockaddr_storage, socklen_t>>& nodes); void bootstrap(const std::vector<Dht::NodeExport>& nodes); void dumpTables() const diff --git a/src/dhtrunner.cpp b/src/dhtrunner.cpp index 0f325e539fac72f4da572c9276203ed79fc1b13b..ba563e85b950bcca4a61387b56facb926f27bcd3 100644 --- a/src/dhtrunner.cpp +++ b/src/dhtrunner.cpp @@ -334,12 +334,12 @@ DhtRunner::putEncrypted(const std::string& key, InfoHash to, Value&& value, Dht: } void -DhtRunner::bootstrap(const std::vector<sockaddr_storage>& nodes) +DhtRunner::bootstrap(const std::vector<std::pair<sockaddr_storage, socklen_t>>& nodes) { std::lock_guard<std::mutex> lck(storage_mtx); pending_ops.emplace([=](SecureDht& dht) { for (auto& node : nodes) - dht.pingNode((sockaddr*)&node, sizeof(node)); + dht.pingNode((sockaddr*)&node.first, node.second); }); cv.notify_all(); } diff --git a/tools/dhtchat.cpp b/tools/dhtchat.cpp index 0bbae5b96a7f47ffd58bbe75d826f5cfca3587bb..e543877b4d773f85992f5717bae6e11b77e96385 100644 --- a/tools/dhtchat.cpp +++ b/tools/dhtchat.cpp @@ -114,7 +114,7 @@ main(int argc, char **argv) if (!port) port = 4222; - std::vector<sockaddr_storage> bootstrap_nodes {}; + std::vector<std::pair<sockaddr_storage, socklen_t>> bootstrap_nodes {}; while (i < argc) { addrinfo hints; memset(&hints, 0, sizeof(hints)); @@ -131,8 +131,8 @@ main(int argc, char **argv) infop = info; while (infop) { sockaddr_storage tmp; - memcpy(&tmp, infop->ai_addr, infop->ai_addrlen); - bootstrap_nodes.push_back(tmp); + std::copy_n((uint8_t*)infop->ai_addr, infop->ai_addrlen, (uint8_t*)&tmp); + bootstrap_nodes.emplace_back(tmp, infop->ai_addrlen); infop = infop->ai_next; } freeaddrinfo(info); diff --git a/tools/dhtnode.cpp b/tools/dhtnode.cpp index decef1559b07c250b422554cb8830bb2c1314c25..2a6444d175fd311ea8c6fe49fcba651edf1bb058 100644 --- a/tools/dhtnode.cpp +++ b/tools/dhtnode.cpp @@ -99,7 +99,7 @@ main(int argc, char **argv) if (!port) port = 4222; - std::vector<sockaddr_storage> bootstrap_nodes {}; + std::vector<std::pair<sockaddr_storage, socklen_t>> bootstrap_nodes {}; while (i < argc) { addrinfo hints; memset(&hints, 0, sizeof(hints)); @@ -116,8 +116,8 @@ main(int argc, char **argv) infop = info; while (infop) { sockaddr_storage tmp; - memcpy(&tmp, infop->ai_addr, infop->ai_addrlen); - bootstrap_nodes.push_back(tmp); + std::copy_n((uint8_t*)infop->ai_addr, infop->ai_addrlen, (uint8_t*)&tmp); + bootstrap_nodes.emplace_back(tmp, infop->ai_addrlen); infop = infop->ai_next; } freeaddrinfo(info);