• Brad Fitzpatrick's avatar
    http2: in Server, disarm connection's ReadTimeout after first request · 69729301
    Brad Fitzpatrick authored
    Fix a regression from Go 1.5 to Go 1.6: when we introduced automatic
    HTTP/2 support in Go 1.6, we never handled Server.ReadTimeout. If a
    user set ReadTimeout, the net/http package would set the read deadline
    on the connection during the TLS handshake, but then the http2 package
    would never disarm it, killing the likely-still-in-use connection
    after the timeout period.
    
    This CL changes it to disarm the timeout after the first request
    headers, similar to net/http.Server.
    
    Unlike net/http.Server, we don't re-arm it on each idle period,
    because the definition of idle is more complicated with HTTP/2.
    
    No tests here for now. Tests will be in the go repo once all the knobs
    are in place and this is re-bundled into std, testing both http1 and
    http2.
    
    Updates golang/go#16450 (minimal fix for now)
    Updates golang/go#14204 (considering a new http1+http2 IdleTimeout knob)
    
    Change-Id: Iaa1570c118efda7dc0a65ba84cd77885699ec8fc
    Reviewed-on: https://go-review.googlesource.com/30077Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
    Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    69729301
server.go 68.8 KB