mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
net: make ErrClosed and ParseError implement net.Error
Fixes #45357 Change-Id: Iafd41fff232a89be4c88d4b1d66bc3c04d888bcc Reviewed-on: https://go-review.googlesource.com/c/go/+/307030 Trust: Ian Lance Taylor <iant@golang.org> Trust: Josh Bleecher Snyder <josharian@gmail.com> Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
This commit is contained in:
parent
a1a45afd4a
commit
e985245cd5
3 changed files with 39 additions and 5 deletions
|
|
@ -13,11 +13,22 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ErrNetClosing is returned when a network descriptor is used after
|
// errNetClosing is the type of the variable ErrNetClosing.
|
||||||
// it has been closed. Keep this string consistent because of issue
|
// This is used to implement the net.Error interface.
|
||||||
// #4373: since historically programs have not been able to detect
|
type errNetClosing struct{}
|
||||||
|
|
||||||
|
// Error returns the error message for ErrNetClosing.
|
||||||
|
// Keep this string consistent because of issue #4373:
|
||||||
|
// since historically programs have not been able to detect
|
||||||
// this error, they look for the string.
|
// this error, they look for the string.
|
||||||
var ErrNetClosing = errors.New("use of closed network connection")
|
func (e errNetClosing) Error() string { return "use of closed network connection" }
|
||||||
|
|
||||||
|
func (e errNetClosing) Timeout() bool { return false }
|
||||||
|
func (e errNetClosing) Temporary() bool { return false }
|
||||||
|
|
||||||
|
// ErrNetClosing is returned when a network descriptor is used after
|
||||||
|
// it has been closed.
|
||||||
|
var ErrNetClosing = errNetClosing{}
|
||||||
|
|
||||||
// ErrFileClosing is returned when a file descriptor is used after it
|
// ErrFileClosing is returned when a file descriptor is used after it
|
||||||
// has been closed.
|
// has been closed.
|
||||||
|
|
|
||||||
|
|
@ -539,6 +539,9 @@ type ParseError struct {
|
||||||
|
|
||||||
func (e *ParseError) Error() string { return "invalid " + e.Type + ": " + e.Text }
|
func (e *ParseError) Error() string { return "invalid " + e.Type + ": " + e.Text }
|
||||||
|
|
||||||
|
func (e *ParseError) Timeout() bool { return false }
|
||||||
|
func (e *ParseError) Temporary() bool { return false }
|
||||||
|
|
||||||
type AddrError struct {
|
type AddrError struct {
|
||||||
Err string
|
Err string
|
||||||
Addr string
|
Addr string
|
||||||
|
|
@ -642,7 +645,7 @@ var errClosed = poll.ErrNetClosing
|
||||||
// another goroutine before the I/O is completed. This may be wrapped
|
// another goroutine before the I/O is completed. This may be wrapped
|
||||||
// in another error, and should normally be tested using
|
// in another error, and should normally be tested using
|
||||||
// errors.Is(err, net.ErrClosed).
|
// errors.Is(err, net.ErrClosed).
|
||||||
var ErrClosed = errClosed
|
var ErrClosed error = errClosed
|
||||||
|
|
||||||
type writerOnly struct {
|
type writerOnly struct {
|
||||||
io.Writer
|
io.Writer
|
||||||
|
|
|
||||||
|
|
@ -588,3 +588,23 @@ func TestNotTemporaryRead(t *testing.T) {
|
||||||
}
|
}
|
||||||
withTCPConnPair(t, client, server)
|
withTCPConnPair(t, client, server)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The various errors should implement the Error interface.
|
||||||
|
func TestErrors(t *testing.T) {
|
||||||
|
var (
|
||||||
|
_ Error = &OpError{}
|
||||||
|
_ Error = &ParseError{}
|
||||||
|
_ Error = &AddrError{}
|
||||||
|
_ Error = UnknownNetworkError("")
|
||||||
|
_ Error = InvalidAddrError("")
|
||||||
|
_ Error = &timeoutError{}
|
||||||
|
_ Error = &DNSConfigError{}
|
||||||
|
_ Error = &DNSError{}
|
||||||
|
)
|
||||||
|
|
||||||
|
// ErrClosed was introduced as type error, so we can't check
|
||||||
|
// it using a declaration.
|
||||||
|
if _, ok := ErrClosed.(Error); !ok {
|
||||||
|
t.Fatal("ErrClosed does not implement Error")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue