mirror of
https://github.com/golang/go
synced 2024-11-19 09:14:40 -07:00
net: remove erroneous Dial check in TestListenerClose
TestListenerClose had been asserting that a Dial to the newly-closed address always fails, on the assumption that the listener's address and port would not be reused by some other listener that could then accept the connection. As far as I can tell, that assumption is not valid: the Dial after Close may well connect to a Listener opened for some other test, or even one opened by a completely different process running concurrently on the same machine. Fixes #38700 Change-Id: I925ed1b2ccb556135a2c5be0240d1789ed27d5fc Reviewed-on: https://go-review.googlesource.com/c/go/+/370666 Trust: Bryan Mills <bcmills@google.com> Run-TryBot: Bryan Mills <bcmills@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
9bfe09d78b
commit
36db10f3cb
@ -243,7 +243,6 @@ func TestListenerClose(t *testing.T) {
|
||||
defer os.Remove(ln.Addr().String())
|
||||
}
|
||||
|
||||
dst := ln.Addr().String()
|
||||
if err := ln.Close(); err != nil {
|
||||
if perr := parseCloseError(err, false); perr != nil {
|
||||
t.Error(perr)
|
||||
@ -256,28 +255,12 @@ func TestListenerClose(t *testing.T) {
|
||||
t.Fatal("should fail")
|
||||
}
|
||||
|
||||
if network == "tcp" {
|
||||
// We will have two TCP FSMs inside the
|
||||
// kernel here. There's no guarantee that a
|
||||
// signal comes from the far end FSM will be
|
||||
// delivered immediately to the near end FSM,
|
||||
// especially on the platforms that allow
|
||||
// multiple consumer threads to pull pending
|
||||
// established connections at the same time by
|
||||
// enabling SO_REUSEPORT option such as Linux,
|
||||
// DragonFly BSD. So we need to give some time
|
||||
// quantum to the kernel.
|
||||
//
|
||||
// Note that net.inet.tcp.reuseport_ext=1 by
|
||||
// default on DragonFly BSD.
|
||||
time.Sleep(time.Millisecond)
|
||||
|
||||
cc, err := Dial("tcp", dst)
|
||||
if err == nil {
|
||||
t.Error("Dial to closed TCP listener succeeded.")
|
||||
cc.Close()
|
||||
}
|
||||
}
|
||||
// Note: we cannot ensure that a subsequent Dial does not succeed, because
|
||||
// we do not in general have any guarantee that ln.Addr is not immediately
|
||||
// reused. (TCP sockets enter a TIME_WAIT state when closed, but that only
|
||||
// applies to existing connections for the port — it does not prevent the
|
||||
// port itself from being used for entirely new connections in the
|
||||
// meantime.)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user