allow the resolver to be reconfigured on the fly

This commit is contained in:
Miek Gieben 2010-12-18 20:55:45 +01:00
parent 0e00511c31
commit ad968420ec
2 changed files with 65 additions and 48 deletions

View File

@ -33,10 +33,11 @@ type Resolver struct {
} }
// do it // do it
func (res *Resolver) Query(msg chan MsgErr, quit chan bool) { func Query(res *Resolver, msg chan MsgErr, quit chan bool) {
var c net.Conn var c net.Conn
var err os.Error var err os.Error
var in *Msg var in *Msg
for {
select { select {
case <-quit: // quit signal recevied case <-quit: // quit signal recevied
println("Quiting") println("Quiting")
@ -86,6 +87,7 @@ func (res *Resolver) Query(msg chan MsgErr, quit chan bool) {
msg <- MsgErr{in, nil} msg <- MsgErr{in, nil}
} }
} }
}
println("Mag nooit hier komen") println("Mag nooit hier komen")
return return
} }

View File

@ -8,9 +8,6 @@ import (
func main() { func main() {
res := new(dns.Resolver) // create a new resolver res := new(dns.Resolver) // create a new resolver
res.Servers = []string{"192.168.1.2"}
res.Timeout = 2
res.Attempts = 1
// Create a new message // Create a new message
m := new(dns.Msg) m := new(dns.Msg)
@ -18,11 +15,18 @@ func main() {
m.Question = make([]dns.Question, 1) m.Question = make([]dns.Question, 1)
m.Question[0] = dns.Question{"miek.nl", dns.TypeSOA, dns.ClassINET} m.Question[0] = dns.Question{"miek.nl", dns.TypeSOA, dns.ClassINET}
// send config (or res with Query)
msgch := make(chan dns.MsgErr) msgch := make(chan dns.MsgErr)
qch := make(chan bool) qch := make(chan bool)
// start the resolver // start the resolver
go res.Query(msgch, qch) go dns.Query(res, msgch, qch)
// configure the resolver
res.Servers = []string{"192.168.1.2"}
res.Timeout = 2
res.Attempts = 1
// ask something // ask something
msgch <- dns.MsgErr{m, nil} msgch <- dns.MsgErr{m, nil}
@ -32,6 +36,17 @@ func main() {
fmt.Printf("%v\n", in.M) fmt.Printf("%v\n", in.M)
// kill resolver // kill resolver
// qch <- true does not work yet // qch <- true does not work yet
m.Question[0] = dns.Question{"a.miek.nl", dns.TypeTXT, dns.ClassINET}
// ask something
msgch <- dns.MsgErr{m, nil}
// wait for an reply
in = <-msgch
fmt.Printf("%v\n", in.M)
time.Sleep(2.0e9) time.Sleep(2.0e9)
/* /*