net: fix inconsistent error values on Accept
This change fixes inconsistent error values on Accept{,TCP,Unix}.
Updates #4856.
Change-Id: Ie3bb534c19a724cacb3ea3f3656e46c810b2123f
Reviewed-on: https://go-review.googlesource.com/8996
Reviewed-by: Ian Lance Taylor <iant@golang.org>
diff --git a/src/net/timeout_test.go b/src/net/timeout_test.go
index fd5658a..3ef22fa 100644
--- a/src/net/timeout_test.go
+++ b/src/net/timeout_test.go
@@ -81,16 +81,28 @@
if _, err := ln.Accept(); !isTimeoutError(err) {
t.Fatalf("Accept: expected err %v, got %v", errTimeout, err)
}
+ if perr := parseAcceptError(err); perr != nil {
+ t.Error(perr)
+ }
if _, err := ln.Accept(); !isTimeoutError(err) {
t.Fatalf("Accept: expected err %v, got %v", errTimeout, err)
}
+ if perr := parseAcceptError(err); perr != nil {
+ t.Error(perr)
+ }
ln.(*TCPListener).SetDeadline(time.Now().Add(100 * time.Millisecond))
if _, err := ln.Accept(); !isTimeoutError(err) {
t.Fatalf("Accept: expected err %v, got %v", errTimeout, err)
}
+ if perr := parseAcceptError(err); perr != nil {
+ t.Error(perr)
+ }
if _, err := ln.Accept(); !isTimeoutError(err) {
t.Fatalf("Accept: expected err %v, got %v", errTimeout, err)
}
+ if perr := parseAcceptError(err); perr != nil {
+ t.Error(perr)
+ }
ln.(*TCPListener).SetDeadline(noDeadline)
errc := make(chan error)
go func() {
@@ -104,15 +116,9 @@
default:
}
ln.Close()
- switch nerr := <-errc; err := nerr.(type) {
- case *OpError:
- if err.Err != errClosing {
- t.Fatalf("Accept: expected err %v, got %v", errClosing, err)
- }
- default:
- if err != errClosing {
- t.Fatalf("Accept: expected err %v, got %v", errClosing, err)
- }
+ err = <-errc
+ if perr := parseAcceptError(err); perr != nil {
+ t.Error(perr)
}
}
@@ -356,18 +362,18 @@
}
}
-func TestTimeoutAccept(t *testing.T) {
+func TestConcurrentAcceptTimeout(t *testing.T) {
switch runtime.GOOS {
case "plan9":
t.Skipf("skipping test on %q", runtime.GOOS)
}
- ln, err := Listen("tcp", "127.0.0.1:0")
+
+ ln, err := newLocalListener("tcp")
if err != nil {
t.Fatal(err)
}
defer ln.Close()
- tl := ln.(*TCPListener)
- tl.SetDeadline(time.Now().Add(100 * time.Millisecond))
+ ln.(*TCPListener).SetDeadline(time.Now().Add(100 * time.Millisecond))
errc := make(chan error, 1)
go func() {
_, err := ln.Accept()
@@ -376,9 +382,11 @@
select {
case <-time.After(1 * time.Second):
// Accept shouldn't block indefinitely
- t.Errorf("Accept didn't return in an expected time")
- case <-errc:
- // Pass.
+ t.Error("Accept didn't return in an expected time")
+ case err := <-errc:
+ if perr := parseAcceptError(err); perr != nil {
+ t.Error(perr)
+ }
}
}