From 035ecdc9e285ad2fd9ccf51e4ed2ac01b53dc3d1 Mon Sep 17 00:00:00 2001 From: peterbell10 Date: Thu, 15 Jun 2017 10:03:49 +0100 Subject: Replace evdns with getaddrinfo and getnameinfo (#3766) --- src/OSSupport/NetworkLookup.cpp | 63 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/OSSupport/NetworkLookup.cpp (limited to 'src/OSSupport/NetworkLookup.cpp') diff --git a/src/OSSupport/NetworkLookup.cpp b/src/OSSupport/NetworkLookup.cpp new file mode 100644 index 000000000..5cd7ecfc4 --- /dev/null +++ b/src/OSSupport/NetworkLookup.cpp @@ -0,0 +1,63 @@ + +// NetworkLookup.cpp + +// Implements the cNetworkLookup class representing an executor for asynchronous lookup tasks + + +#include "Globals.h" +#include "NetworkLookup.h" + + + + +cNetworkLookup::cNetworkLookup() : + cIsThread("NetworkLookup") +{ +} + + + + + +cNetworkLookup::~cNetworkLookup() +{ + Stop(); +} + + + + + +void cNetworkLookup::ScheduleLookup(std::function a_Lookup) +{ + m_WorkQueue.EnqueueItem(std::move(a_Lookup)); +} + + + + + +void cNetworkLookup::Stop() +{ + m_ShouldTerminate = true; + m_WorkQueue.Clear(); + m_WorkQueue.EnqueueItem([](){}); // Dummy work to wake up the thread + cIsThread::Stop(); +} + + + + + +void cNetworkLookup::Execute() +{ + while (!m_ShouldTerminate) + { + // Execute the next task in the queue + auto Work = m_WorkQueue.DequeueItem(); + Work(); + } +} + + + -- cgit v1.2.3