diff options
Diffstat (limited to 'libgo/go/net/net_test.go')
-rw-r--r-- | libgo/go/net/net_test.go | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/libgo/go/net/net_test.go b/libgo/go/net/net_test.go index 3907ce4aa56..6dcfc2190e0 100644 --- a/libgo/go/net/net_test.go +++ b/libgo/go/net/net_test.go @@ -208,7 +208,6 @@ func TestListenerClose(t *testing.T) { case "unix", "unixpacket": defer os.Remove(ln.Addr().String()) } - defer ln.Close() if err := ln.Close(); err != nil { if perr := parseCloseError(err); perr != nil { @@ -221,6 +220,14 @@ func TestListenerClose(t *testing.T) { c.Close() t.Fatal("should fail") } + + if network == "tcp" { + cc, err := Dial("tcp", ln.Addr().String()) + if err == nil { + t.Error("Dial to closed TCP listener succeeeded.") + cc.Close() + } + } } } @@ -254,3 +261,26 @@ func TestPacketConnClose(t *testing.T) { } } } + +// nacl was previous failing to reuse an address. +func TestListenCloseListen(t *testing.T) { + const maxTries = 10 + for tries := 0; tries < maxTries; tries++ { + ln, err := newLocalListener("tcp") + if err != nil { + t.Fatal(err) + } + addr := ln.Addr().String() + if err := ln.Close(); err != nil { + t.Fatal(err) + } + ln, err = Listen("tcp", addr) + if err == nil { + // Success. nacl couldn't do this before. + ln.Close() + return + } + t.Errorf("failed on try %d/%d: %v", tries+1, maxTries, err) + } + t.Fatalf("failed to listen/close/listen on same address after %d tries", maxTries) +} |