// Run is a blocking operation that starts the server listening on the DNS ports.
func(s*server)Run()error{
mux:=dns.NewServeMux()
mux.Handle(".",s)
dnsReadyMsg:=func(addr,netstring){
ifs.config.DNSSEC==""{
logf("ready for queries on %s for %s://%s [rcache %d]",s.config.Domain,net,addr,s.config.RCache)
}else{
logf("ready for queries on %s for %s://%s [rcache %d], signing with %s [scache %d]",s.config.Domain,net,addr,s.config.RCache,s.config.DNSSEC,s.config.SCache)
}
}
ifs.config.Systemd{
packetConns,err:=activation.PacketConns(false)
iferr!=nil{
returnerr
}
listeners,err:=activation.Listeners(true)
iferr!=nil{
returnerr
}
iflen(packetConns)==0&&len(listeners)==0{
returnfmt.Errorf("no UDP or TCP sockets supplied by systemd")