use super::service_ref::ManagedDNSServiceRef;
use crate::event_loop::TEventLoop;
use crate::{Result, ffi};
use std::sync::{Arc, Mutex};
use std::time::Duration;
#[derive(new)]
pub struct BonjourEventLoop {
service: Arc<Mutex<ManagedDNSServiceRef>>,
}
impl TEventLoop for BonjourEventLoop {
fn poll(&self, timeout: Duration) -> Result<()> {
let service = self
.service
.lock()
.expect("should have been able to obtain lock on service ref");
let select = unsafe { ffi::bonjour::read_select(service.sock_fd(), timeout)? };
if select > 0 {
unsafe { service.process_result() }
} else {
Ok(())
}
}
}