Clean ups

This commit is contained in:
Miek Gieben 2011-03-29 11:17:43 +02:00
parent 4b0bee3c94
commit 879e6dcda8
3 changed files with 6 additions and 9 deletions

View File

@ -22,6 +22,7 @@ func main() {
d.RemoteAddr = c.Servers[0] d.RemoteAddr = c.Servers[0]
d.Dial("udp") d.Dial("udp")
for _, a := range addresses(d, os.Args[0]) { for _, a := range addresses(d, os.Args[0]) {
// d.Close() -- interesting
d.RemoteAddr = a d.RemoteAddr = a
d.Dial("udp") // Redial TODO(mg) d.Dial("udp") // Redial TODO(mg)
m.Question[0] = dns.Question{"version.bind.", dns.TypeTXT, dns.ClassCHAOS} m.Question[0] = dns.Question{"version.bind.", dns.TypeTXT, dns.ClassCHAOS}

5
dns.go
View File

@ -1,7 +1,7 @@
// Copyright 2009 The Go Authors. All rights reserved. // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
// Extended and bugfixes by Miek Gieben // Extended and bugfixes by Miek Gieben.
// Package dns implements a full featured interface to the DNS. // Package dns implements a full featured interface to the DNS.
// The package allows complete control over what is send out to the DNS. // The package allows complete control over what is send out to the DNS.
@ -16,7 +16,7 @@
// The package dns supports (async) querying/replying, incoming/outgoing Axfr/Ixfr, // The package dns supports (async) querying/replying, incoming/outgoing Axfr/Ixfr,
// TSIG, EDNS0, dynamic updates, notifies and DNSSEC validation/signing. // TSIG, EDNS0, dynamic updates, notifies and DNSSEC validation/signing.
// //
// A lot of functions take a dns message. Use pattern for creating one: // In the DNS messages are exchanged. Use pattern for creating one:
// //
// message := new(Msg) // message := new(Msg)
// // Create message with the desired options. // // Create message with the desired options.
@ -31,6 +31,7 @@
// dnsconn.RemoteAddr = "127.0.0.1:53" // dnsconn.RemoteAddr = "127.0.0.1:53"
// dnsconn.Dial("udp") // "tcp" for tcp connection. // dnsconn.Dial("udp") // "tcp" for tcp connection.
// inmessage, err := SimpleQuery(dnsconn, message) // inmessage, err := SimpleQuery(dnsconn, message)
// dnsconn.Close()
// //
// (Asynchronize) querying the DNS is also supported. The Query structure // (Asynchronize) querying the DNS is also supported. The Query structure
// is used for communicating with the Query* functions. // is used for communicating with the Query* functions.

View File

@ -8,7 +8,6 @@ package dns
import ( import (
"os" "os"
"net"
) )
// Query is used to communicate with the Query* functions. // Query is used to communicate with the Query* functions.
@ -44,15 +43,10 @@ func query(n string, in, out chan Query, f func(*Conn, *Msg, chan Query)) {
for { for {
select { select {
case q := <-in: case q := <-in:
c, err := net.Dial(n, q.Conn.LocalAddr, q.Conn.RemoteAddr) err := q.Conn.Dial(n)
if err != nil { if err != nil {
out <- Query{Err: err} out <- Query{Err: err}
} }
if n == "tcp" {
q.Conn.SetTCPConn(c.(*net.TCPConn), nil)
} else {
q.Conn.SetUDPConn(c.(*net.UDPConn), nil)
}
if f == nil { if f == nil {
go QueryDefault(q.Conn, q.Msg, out) go QueryDefault(q.Conn, q.Msg, out)
} else { } else {
@ -65,6 +59,7 @@ func query(n string, in, out chan Query, f func(*Conn, *Msg, chan Query)) {
// Default Handler when none is given. // Default Handler when none is given.
func QueryDefault(d *Conn, m *Msg, q chan Query) { func QueryDefault(d *Conn, m *Msg, q chan Query) {
defer d.Close()
buf, ok := m.Pack() buf, ok := m.Pack()
if !ok { if !ok {
q <- Query{nil, d, ErrPack} q <- Query{nil, d, ErrPack}