aboutsummaryrefslogtreecommitdiff
path: root/plugin/forward/connect.go
diff options
context:
space:
mode:
authorGravatar Ruslan Drozhdzh <30860269+rdrozhdzh@users.noreply.github.com> 2018-04-06 15:41:48 +0300
committerGravatar Miek Gieben <miek@miek.nl> 2018-04-06 13:41:48 +0100
commite46ee9d9cc197d74dac0cb6e8432f83d4f43d1a6 (patch)
tree66ac38903d67d57f0a23552f0be7cea3bd3bdd93 /plugin/forward/connect.go
parent848a5d7c7909afbc381a0708dc4893c28a1df61c (diff)
downloadcoredns-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.go9
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
}