• Brad Fitzpatrick's avatar
    net/http: make Server.Shutdown treat new connections as idle after 5 seconds · a79fe535
    Brad Fitzpatrick authored
    The Server distinguishes "new" vs "idle" connections. A TCP connection
    from which no bytes have yet been written is "new". A connection that
    has previously served a request and is in "keep-alive" state while
    waiting for a second or further request is "idle".
    
    The graceful Server.Shutdown historically only shut down "idle"
    connections, with the assumption that a "new" connection was about to
    read its request and would then shut down on its own afterwards.
    
    But apparently some clients spin up connections and don't end up using
    them, so we have something that's "new" to us, but browsers or other
    clients are treating as "idle" to them.
    
    This CL tweaks our heuristic to treat a StateNew connection as
    StateIdle if it's been stuck in StateNew for over 5 seconds.
    
    Fixes #22682
    
    Change-Id: I01ba59a6ab67755ca5ab567041b1f54aa7b7da6f
    Reviewed-on: https://go-review.googlesource.com/121419
    Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
    Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    a79fe535
serve_test.go 158 KB