From b02f1b5203d60fa2cf77da5f92bcd4139788c9fc Mon Sep 17 00:00:00 2001 From: Miek Gieben Date: Sun, 29 Sep 2013 11:46:39 +0100 Subject: [PATCH] Add Timeouts back in. Fix the timeouts --- client.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/client.go b/client.go index 4872418b..2902a84a 100644 --- a/client.go +++ b/client.go @@ -43,7 +43,10 @@ func Exchange(m *Msg, a string) (r *Msg, err error) { if err != nil { return nil, err } + defer co.Close() + co.SetReadDeadline(time.Now().Add(dnsTimeout)) + co.SetWriteDeadline(time.Now().Add(dnsTimeout)) if err = co.WriteMsg(m); err != nil { return nil, err } @@ -97,6 +100,16 @@ func (c *Client) exchange(m *Msg, a string) (r *Msg, rtt time.Duration, err erro if err != nil { return nil, 0, err } + timeout = dnsTimeout + if c.ReadTimeout != 0 { + timeout = c.ReadTimeout + } + co.SetReadDeadline(time.Now().Add(dnsTimeout)) + timeout = dnsTimeout + if c.WriteTimeout != 0 { + timeout = c.ReadTimeout + } + co.SetWriteDeadline(time.Now().Add(dnsTimeout)) defer co.Close() opt := m.IsEdns0() if opt != nil && opt.UDPSize() >= MinMsgSize {