aboutsummaryrefslogtreecommitdiff
path: root/src/net/error_test.go
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2020-08-24 21:42:20 -0700
committerIan Lance Taylor <iant@golang.org>2020-08-26 22:48:00 +0000
commite9ad52e46dee4b4f9c73ff44f44e1e234815800f (patch)
treeda4b86268d81c3538501f63534bce3b16d8f0277 /src/net/error_test.go
parent694fc8e76bec99b67bbd0302852f6a1c1dafe7ca (diff)
downloadgo-e9ad52e46dee4b4f9c73ff44f44e1e234815800f.tar.xz
net: export ErrClosed
This permits programs to reliably detect whether they are using a closed network connection. Fixes #4373 Change-Id: Ib4ce8cc82bbb134c4689f0ebc8b9b11bb8b32a22 Reviewed-on: https://go-review.googlesource.com/c/go/+/250357 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com> Reviewed-by: Russ Cox <rsc@golang.org>
Diffstat (limited to 'src/net/error_test.go')
-rw-r--r--src/net/error_test.go17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/net/error_test.go b/src/net/error_test.go
index 8d4a7ffb3d..62dfb9c15d 100644
--- a/src/net/error_test.go
+++ b/src/net/error_test.go
@@ -8,6 +8,7 @@ package net
import (
"context"
+ "errors"
"fmt"
"internal/poll"
"io"
@@ -101,7 +102,7 @@ second:
goto third
}
switch nestedErr {
- case errCanceled, poll.ErrNetClosing, errMissingAddress, errNoSuitableAddress,
+ case errCanceled, ErrClosed, errMissingAddress, errNoSuitableAddress,
context.DeadlineExceeded, context.Canceled:
return nil
}
@@ -436,7 +437,7 @@ second:
goto third
}
switch nestedErr {
- case poll.ErrNetClosing, errTimeout, poll.ErrNotPollable, os.ErrDeadlineExceeded:
+ case ErrClosed, errTimeout, poll.ErrNotPollable, os.ErrDeadlineExceeded:
return nil
}
return fmt.Errorf("unexpected type on 2nd nested level: %T", nestedErr)
@@ -478,7 +479,7 @@ second:
goto third
}
switch nestedErr {
- case errCanceled, poll.ErrNetClosing, errMissingAddress, errTimeout, os.ErrDeadlineExceeded, ErrWriteToConnected, io.ErrUnexpectedEOF:
+ case errCanceled, ErrClosed, errMissingAddress, errTimeout, os.ErrDeadlineExceeded, ErrWriteToConnected, io.ErrUnexpectedEOF:
return nil
}
return fmt.Errorf("unexpected type on 2nd nested level: %T", nestedErr)
@@ -508,6 +509,10 @@ func parseCloseError(nestedErr error, isShutdown bool) error {
return fmt.Errorf("error string %q does not contain expected string %q", nestedErr, want)
}
+ if !isShutdown && !errors.Is(nestedErr, ErrClosed) {
+ return fmt.Errorf("errors.Is(%v, errClosed) returns false, want true", nestedErr)
+ }
+
switch err := nestedErr.(type) {
case *OpError:
if err := err.isValid(); err != nil {
@@ -531,7 +536,7 @@ second:
goto third
}
switch nestedErr {
- case poll.ErrNetClosing:
+ case ErrClosed:
return nil
}
return fmt.Errorf("unexpected type on 2nd nested level: %T", nestedErr)
@@ -627,7 +632,7 @@ second:
goto third
}
switch nestedErr {
- case poll.ErrNetClosing, errTimeout, poll.ErrNotPollable, os.ErrDeadlineExceeded:
+ case ErrClosed, errTimeout, poll.ErrNotPollable, os.ErrDeadlineExceeded:
return nil
}
return fmt.Errorf("unexpected type on 2nd nested level: %T", nestedErr)
@@ -706,7 +711,7 @@ second:
goto third
}
switch nestedErr {
- case poll.ErrNetClosing:
+ case ErrClosed:
return nil
}
return fmt.Errorf("unexpected type on 2nd nested level: %T", nestedErr)