diff --git a/src/ripple/app/main/Application.cpp b/src/ripple/app/main/Application.cpp index be0a7b46a..20427107b 100644 --- a/src/ripple/app/main/Application.cpp +++ b/src/ripple/app/main/Application.cpp @@ -1527,7 +1527,7 @@ ApplicationImp::setup(boost::program_options::variables_map const& cmdline) reportingETL_->start(); // Datagram monitor if applicable - if (!config_->standalone() && config_->DATAGRAM_MONITOR != "") + if (!config_->standalone() && !config_->DATAGRAM_MONITOR.empty()) { datagram_monitor_ = std::make_unique(*this); if (datagram_monitor_) diff --git a/src/ripple/app/misc/DatagramMonitor.h b/src/ripple/app/misc/DatagramMonitor.h index ba6ce0213..033090581 100644 --- a/src/ripple/app/misc/DatagramMonitor.h +++ b/src/ripple/app/misc/DatagramMonitor.h @@ -996,15 +996,24 @@ private: void monitorThread() { - auto endpoint = parseEndpoint(app_.config().DATAGRAM_MONITOR); - int sock = createSocket(endpoint); + std::vector> endpoints; + + for (auto const& epStr : app_.config().DATAGRAM_MONITOR) + { + auto endpoint = parseEndpoint(epStr); + endpoints.push_back( + std::make_pair(endpoint, createSocket(endpoint))); + } while (running_) { try { auto info = generateServerInfo(); - sendPacket(sock, endpoint, info); + for (auto const& ep : endpoints) + { + sendPacket(ep.second, ep.first, info); + } std::this_thread::sleep_for(std::chrono::seconds(1)); } catch (const std::exception& e) @@ -1015,7 +1024,10 @@ private: } } - close(sock); + for (auto const& ep : endpoints) + { + close(ep.second); + } } public: diff --git a/src/ripple/core/Config.h b/src/ripple/core/Config.h index 5d9977770..3e2c3c81a 100644 --- a/src/ripple/core/Config.h +++ b/src/ripple/core/Config.h @@ -155,7 +155,7 @@ public: std::map IMPORT_VL_KEYS; // hex string -> class PublicKey (for caching purposes) - std::string DATAGRAM_MONITOR; + std::vector DATAGRAM_MONITOR; enum StartUpType { FRESH, diff --git a/src/ripple/core/impl/Config.cpp b/src/ripple/core/impl/Config.cpp index 656993752..7673d16ec 100644 --- a/src/ripple/core/impl/Config.cpp +++ b/src/ripple/core/impl/Config.cpp @@ -510,11 +510,10 @@ Config::loadFromString(std::string const& fileContents) NETWORK_ID = beast::lexicalCastThrow(strTemp); } - if (getSingleSection(secConfig, SECTION_DATAGRAM_MONITOR, strTemp, j_)) + if (auto s = getIniFileSection(secConfig, SECTION_DATAGRAM_MONITOR)) { - std::vector vecTemp{strTemp}; - replaceColons(vecTemp); - DATAGRAM_MONITOR = vecTemp[0]; + DATAGRAM_MONITOR = *s; + replaceColons(DATAGRAM_MONITOR); } if (getSingleSection(secConfig, SECTION_PEER_PRIVATE, strTemp, j_))