]> Cypherpunks repositories - gostls13.git/commitdiff
net: remove erroneous Dial check in TestListenerClose
authorBryan C. Mills <bcmills@google.com>
Thu, 9 Dec 2021 22:00:51 +0000 (17:00 -0500)
committerBryan Mills <bcmills@google.com>
Mon, 13 Dec 2021 15:47:14 +0000 (15:47 +0000)
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>
src/net/net_test.go

index 35acac509be0314c99333611e2f8f968efc4098f..5d9c3c67e681daa7b75cf7b94ab41f93c5e364f7 100644 (file)
@@ -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.)
                })
        }
 }