diff --git a/recovery.go b/recovery.go index e788cc47..f06ad56b 100644 --- a/recovery.go +++ b/recovery.go @@ -15,7 +15,7 @@ import ( "net/http/httputil" "os" "runtime" - "syscall" + "strings" "time" ) @@ -45,7 +45,7 @@ func RecoveryWithWriter(out io.Writer) HandlerFunc { var brokenPipe bool if ne, ok := err.(*net.OpError); ok { if se, ok := ne.Err.(*os.SyscallError); ok { - if se.Err == syscall.EPIPE || se.Err == syscall.ECONNRESET { + if strings.Contains(strings.ToLower(se.Error()), "broken pipe") || strings.Contains(strings.ToLower(se.Error()), "connection reset by peer") { brokenPipe = true } } diff --git a/recovery_test.go b/recovery_test.go index cafaee91..c9fb29ce 100644 --- a/recovery_test.go +++ b/recovery_test.go @@ -84,8 +84,8 @@ func TestPanicWithBrokenPipe(t *testing.T) { const expectCode = 204 expectMsgs := map[syscall.Errno]string{ - syscall.EPIPE: "broken pipe", - syscall.ECONNRESET: "connection reset", + syscall.EPIPE: "Broken pipe", + syscall.ECONNRESET: "connection reset by peer", } for errno, expectMsg := range expectMsgs {