diff options
Diffstat (limited to 'src/network/dns_queue.rs')
-rw-r--r-- | src/network/dns_queue.rs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/network/dns_queue.rs b/src/network/dns_queue.rs new file mode 100644 index 0000000..93728e8 --- /dev/null +++ b/src/network/dns_queue.rs @@ -0,0 +1,36 @@ + +use ::std::net::Ipv4Addr; + +use ::std::mem::swap; +use ::std::sync::{Mutex, Condvar}; + +pub struct DnsQueue { + jobs: Mutex<Vec<Ipv4Addr>>, + cvar: Condvar +} + +impl DnsQueue { + pub fn new() -> Self { + DnsQueue { + jobs: Mutex::new(Vec::new()), + cvar: Condvar::new() + } + } +} + +impl DnsQueue { + pub fn add_ips_to_resolve(&self, unresolved_ips: Vec<Ipv4Addr>) { + let mut queue = self.jobs.lock().unwrap(); + queue.append(&mut unresolved_ips.into_iter().collect()); + self.cvar.notify_all(); + } + pub fn wait_for_jobs(&self) -> Vec<Ipv4Addr> { + let mut jobs = self.cvar.wait(self.jobs.lock().unwrap()).unwrap(); + let mut new_jobs = Vec::new(); + swap(&mut new_jobs, &mut jobs); + new_jobs + } + pub fn end(&self) { + self.cvar.notify_all(); + } +} |