netutil: fix test to not t.Fatal from goroutine

Change-Id: I07941ecadf7d7268542d13b402436b6111772d02
GitHub-Last-Rev: aece213e5011c6f1d6bbb10f8923adf25fdea2a0
GitHub-Pull-Request: golang/net#57
Reviewed-on: https://go-review.googlesource.com/c/net/+/203877
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
diff --git a/netutil/listen_test.go b/netutil/listen_test.go
index e00433d..e77e6f4 100644
--- a/netutil/listen_test.go
+++ b/netutil/listen_test.go
@@ -18,6 +18,7 @@
 )
 
 const defaultMaxOpenFiles = 256
+const timeout = 5 * time.Second
 
 func TestLimitListener(t *testing.T) {
 	const max = 5
@@ -95,7 +96,7 @@
 	}()
 	select {
 	case <-donec:
-	case <-time.After(5 * time.Second):
+	case <-time.After(timeout):
 		t.Fatal("timeout. deadlock?")
 	}
 }
@@ -108,15 +109,15 @@
 	defer ln.Close()
 	ln = LimitListener(ln, 1)
 
-	doneCh := make(chan struct{})
-	defer close(doneCh)
+	errCh := make(chan error)
 	go func() {
-		c, err := net.Dial("tcp", ln.Addr().String())
+		defer close(errCh)
+		c, err := net.DialTimeout("tcp", ln.Addr().String(), timeout)
 		if err != nil {
-			t.Fatal(err)
+			errCh <- err
+			return
 		}
-		defer c.Close()
-		<-doneCh
+		c.Close()
 	}()
 
 	c, err := ln.Accept()
@@ -125,6 +126,11 @@
 	}
 	defer c.Close()
 
+	err = <-errCh
+	if err != nil {
+		t.Fatalf("DialTimeout: %v", err)
+	}
+
 	acceptDone := make(chan struct{})
 	go func() {
 		c, err := ln.Accept()
@@ -141,7 +147,7 @@
 
 	select {
 	case <-acceptDone:
-	case <-time.After(5 * time.Second):
+	case <-time.After(timeout):
 		t.Fatalf("Accept() still blocking")
 	}
 }