mirror of
https://github.com/golang/go
synced 2024-11-18 00:54:45 -07:00
net/http: make Server respect shutdown state after handler finishes
If the Server's Shutdown (or SetKeepAlivesEnabled) method was called while a connection was in a Handler, but after the headers had been written, the connection was not later closed. Fixes #9478 Updates #17754 (reverts that workaround) Change-Id: I65324ab8217373fbb38e12e2b8bffd0a91806072 Reviewed-on: https://go-review.googlesource.com/33141 Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
39e3cbfff6
commit
9f9d83404f
@ -4943,9 +4943,6 @@ func TestServerSetKeepAlivesEnabledClosesConns(t *testing.T) {
|
||||
}) {
|
||||
t.Fatalf("idle count before SetKeepAlivesEnabled called = %v; want 1", idle0)
|
||||
}
|
||||
if !waitCondition(2*time.Second, 10*time.Millisecond, ts.Config.ExportAllConnsIdle) {
|
||||
t.Fatalf("test server has active conns")
|
||||
}
|
||||
|
||||
ts.Config.SetKeepAlivesEnabled(false)
|
||||
|
||||
|
@ -1827,6 +1827,14 @@ func (c *conn) serve(ctx context.Context) {
|
||||
c.setState(c.rwc, StateIdle)
|
||||
c.curReq.Store((*response)(nil))
|
||||
|
||||
if !w.conn.server.doKeepAlives() {
|
||||
// We're in shutdown mode. We might've replied
|
||||
// to the user without "Connection: close" and
|
||||
// they might think they can send another
|
||||
// request, but such is life with HTTP/1.1.
|
||||
return
|
||||
}
|
||||
|
||||
if d := c.server.idleTimeout(); d != 0 {
|
||||
c.rwc.SetReadDeadline(time.Now().Add(d))
|
||||
if _, err := c.bufr.Peek(4); err != nil {
|
||||
|
Loading…
Reference in New Issue
Block a user