dns-server 0.2.6

A threaded DNS server.
Documentation
// $ cargo run --package dns-server --example example_server

use dns_server::{Builder, DnsRecord};
use permit::Permit;
use signal_hook::consts::{SIGHUP, SIGINT, SIGQUIT, SIGTERM};
use signal_hook::iterator::Signals;

fn main() {
    let top_permit = Permit::new();
    let permit = top_permit.new_sub();
    std::thread::spawn(move || {
        Signals::new([SIGHUP, SIGINT, SIGQUIT, SIGTERM])
            .unwrap()
            .forever()
            .next();
        println!("Shutting down.");
        drop(top_permit);
    });
    let (builder, addr) = Builder::new_random_port().unwrap();
    println!("Listening on UDP port {}", addr.port());
    let records = vec![
        DnsRecord::new_a("aaa.example.com", "10.0.0.1").unwrap(),
        DnsRecord::new_a("aaa.example.com", "10.0.0.2").unwrap(),
        DnsRecord::new_aaaa("aaa.example.com", "2606:2800:220:1:248:1893:25c8:1946").unwrap(),
        DnsRecord::new_cname("bbb.example.com", "ccc.example.com").unwrap(),
        DnsRecord::new_txt("txt.example.com", "abc").unwrap(),
        DnsRecord::new_txt_multi("txt2.example.com", &["a", "b"]).unwrap(),
    ];
    builder.with_permit(permit).serve_static(&records).unwrap();
}