From: Bryan C. Mills Date: Mon, 22 Jan 2024 23:02:38 +0000 (-0500) Subject: net: report timeouts more aggressively in Accept in the fake implementation X-Git-Tag: go1.23rc1~1407 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=f75e1c1460a009ee3feb9fbd34fc17b957644dc5;p=gostls13.git net: report timeouts more aggressively in Accept in the fake implementation This ensures that if the listener has already timed out when Accept is called, Accept always returns an error instead of instantaneously accepting a connection that was already pending. For #17948. Change-Id: Iabef7121590df3dcc2fe428429d7c2bc2bcb6cd5 Reviewed-on: https://go-review.googlesource.com/c/go/+/557438 LUCI-TryBot-Result: Go LUCI Auto-Submit: Bryan Mills Reviewed-by: Damien Neil --- diff --git a/src/net/net_fake.go b/src/net/net_fake.go index 60b52b79fd..b7ecb39144 100644 --- a/src/net/net_fake.go +++ b/src/net/net_fake.go @@ -325,14 +325,27 @@ func (ffd *fakeNetFD) accept(laddr Addr) (*netFD, error) { incoming []*netFD ok bool ) + expired := ffd.readDeadline.Load().expired select { - case <-ffd.readDeadline.Load().expired: + case <-expired: return nil, os.ErrDeadlineExceeded case incoming, ok = <-ffd.incoming: if !ok { return nil, ErrClosed } + select { + case <-expired: + ffd.incoming <- incoming + return nil, os.ErrDeadlineExceeded + default: + } case incoming, ok = <-ffd.incomingFull: + select { + case <-expired: + ffd.incomingFull <- incoming + return nil, os.ErrDeadlineExceeded + default: + } } peer := incoming[0]