From 8fd7f25955530b92e73e9e1932a41b522b22ccd9 Mon Sep 17 00:00:00 2001 From: Kale Blankenship Date: Thu, 29 Dec 2016 12:13:24 -0800 Subject: [PATCH] http2: clear WriteTimeout in Server Current handling of WriteTimeout for http2 does not extend the timeout on new streams. Disable the WriteTimeout in http2 for 1.8 release. Fixes test added in https://golang.org/cl/34723 Updates golang/go#18437 Change-Id: I366899fb4ff2e740610cad71e004141d092699a2 Reviewed-on: https://go-review.googlesource.com/34724 Reviewed-by: Brad Fitzpatrick Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot --- http2/server.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/http2/server.go b/http2/server.go index 0431ab0b..3c6b90cc 100644 --- a/http2/server.go +++ b/http2/server.go @@ -278,6 +278,16 @@ func (s *Server) ServeConn(c net.Conn, opts *ServeConnOpts) { pushEnabled: true, } + // The net/http package sets the write deadline from the + // http.Server.WriteTimeout during the TLS handshake, but then + // passes the connection off to us with the deadline already + // set. Disarm it here so that it is not applied to additional + // streams opened on this connection. + // TODO: implement WriteTimeout fully. See Issue 18437. + if sc.hs.WriteTimeout != 0 { + sc.conn.SetWriteDeadline(time.Time{}) + } + if s.NewWriteScheduler != nil { sc.writeSched = s.NewWriteScheduler() } else {