diff options
author | 2018-04-06 15:41:48 +0300 | |
---|---|---|
committer | 2018-04-06 13:41:48 +0100 | |
commit | e46ee9d9cc197d74dac0cb6e8432f83d4f43d1a6 (patch) | |
tree | 66ac38903d67d57f0a23552f0be7cea3bd3bdd93 /plugin/forward/connect.go | |
parent | 848a5d7c7909afbc381a0708dc4893c28a1df61c (diff) | |
download | coredns-e46ee9d9cc197d74dac0cb6e8432f83d4f43d1a6.tar.gz coredns-e46ee9d9cc197d74dac0cb6e8432f83d4f43d1a6.tar.zst coredns-e46ee9d9cc197d74dac0cb6e8432f83d4f43d1a6.zip |
plugin/forward: retry on cached tcp connection closed by peer (#1655)
* plugin/forward: retry on cached tcp connection closed by peer
* fix linter warnings
* fixed unit test
* modify error message
Diffstat (limited to 'plugin/forward/connect.go')
-rw-r--r-- | plugin/forward/connect.go | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/plugin/forward/connect.go b/plugin/forward/connect.go index 5967c396c..6f9897550 100644 --- a/plugin/forward/connect.go +++ b/plugin/forward/connect.go @@ -5,6 +5,7 @@ package forward import ( + "io" "strconv" "time" @@ -22,7 +23,7 @@ func (p *Proxy) connect(ctx context.Context, state request.Request, forceTCP, me proto = "tcp" } - conn, err := p.Dial(proto) + conn, cached, err := p.Dial(proto) if err != nil { return nil, err } @@ -36,6 +37,9 @@ func (p *Proxy) connect(ctx context.Context, state request.Request, forceTCP, me conn.SetWriteDeadline(time.Now().Add(timeout)) if err := conn.WriteMsg(state.Req); err != nil { conn.Close() // not giving it back + if err == io.EOF && cached { + return nil, errCachedClosed + } return nil, err } @@ -43,6 +47,9 @@ func (p *Proxy) connect(ctx context.Context, state request.Request, forceTCP, me ret, err := conn.ReadMsg() if err != nil { conn.Close() // not giving it back + if err == io.EOF && cached { + return nil, errCachedClosed + } return nil, err } |