mirror of
https://github.com/miekg/dns.git
synced 2025-12-16 17:21:17 +01:00
Merge pull request #209 from michaelharo/client
Cleanup Client.exchange
This commit is contained in:
commit
031d041ced
44
client.go
44
client.go
@ -128,31 +128,39 @@ func (c *Client) Exchange(m *Msg, a string) (r *Msg, rtt time.Duration, err erro
|
|||||||
return r, rtt, nil
|
return r, rtt, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) exchange(m *Msg, a string) (r *Msg, rtt time.Duration, err error) {
|
func (c *Client) dialTimeout() time.Duration {
|
||||||
timeout := dnsTimeout
|
|
||||||
var co *Conn
|
|
||||||
if c.DialTimeout != 0 {
|
if c.DialTimeout != 0 {
|
||||||
timeout = c.DialTimeout
|
return c.DialTimeout
|
||||||
}
|
}
|
||||||
|
return dnsTimeout
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) readTimeout() time.Duration {
|
||||||
|
if c.ReadTimeout != 0 {
|
||||||
|
return c.ReadTimeout
|
||||||
|
}
|
||||||
|
return dnsTimeout
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) writeTimeout() time.Duration {
|
||||||
|
if c.WriteTimeout != 0 {
|
||||||
|
return c.WriteTimeout
|
||||||
|
}
|
||||||
|
return dnsTimeout
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) exchange(m *Msg, a string) (r *Msg, rtt time.Duration, err error) {
|
||||||
|
var co *Conn
|
||||||
if c.Net == "" {
|
if c.Net == "" {
|
||||||
co, err = DialTimeout("udp", a, timeout)
|
co, err = DialTimeout("udp", a, c.dialTimeout())
|
||||||
} else {
|
} else {
|
||||||
co, err = DialTimeout(c.Net, a, timeout)
|
co, err = DialTimeout(c.Net, a, c.dialTimeout())
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, 0, err
|
return nil, 0, err
|
||||||
}
|
}
|
||||||
timeout = dnsTimeout
|
|
||||||
if c.ReadTimeout != 0 {
|
|
||||||
timeout = c.ReadTimeout
|
|
||||||
}
|
|
||||||
co.SetReadDeadline(time.Now().Add(timeout))
|
|
||||||
timeout = dnsTimeout
|
|
||||||
if c.WriteTimeout != 0 {
|
|
||||||
timeout = c.WriteTimeout
|
|
||||||
}
|
|
||||||
co.SetWriteDeadline(time.Now().Add(timeout))
|
|
||||||
defer co.Close()
|
defer co.Close()
|
||||||
|
|
||||||
opt := m.IsEdns0()
|
opt := m.IsEdns0()
|
||||||
// If EDNS0 is used use that for size.
|
// If EDNS0 is used use that for size.
|
||||||
if opt != nil && opt.UDPSize() >= MinMsgSize {
|
if opt != nil && opt.UDPSize() >= MinMsgSize {
|
||||||
@ -162,6 +170,10 @@ func (c *Client) exchange(m *Msg, a string) (r *Msg, rtt time.Duration, err erro
|
|||||||
if opt == nil && c.UDPSize >= MinMsgSize {
|
if opt == nil && c.UDPSize >= MinMsgSize {
|
||||||
co.UDPSize = c.UDPSize
|
co.UDPSize = c.UDPSize
|
||||||
}
|
}
|
||||||
|
|
||||||
|
co.SetReadDeadline(time.Now().Add(c.readTimeout()))
|
||||||
|
co.SetWriteDeadline(time.Now().Add(c.writeTimeout()))
|
||||||
|
|
||||||
co.TsigSecret = c.TsigSecret
|
co.TsigSecret = c.TsigSecret
|
||||||
if err = co.WriteMsg(m); err != nil {
|
if err = co.WriteMsg(m); err != nil {
|
||||||
return nil, 0, err
|
return nil, 0, err
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user