mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
net/http: return error from Serve if http2.ConfigureServer returns an error
In https://golang.org/cl/15860 http2.ConfigureServer was changed to return an error if explicit CipherSuites are listed and they're not compliant with the HTTP/2 spec. This is the net/http side of the change, to look at the return value from ConfigureServer and propagate it in Server.Serve. h2_bundle.go will be updated in a future CL. There are too many other http2 changes pending to be worth updating it now. Instead, h2_bundle.go is minimally updated by hand in this CL so at least the net/http change will compile. Updates #12895 Change-Id: I4df7a097faff2d235742c2d310c333bd3fd5c08e Reviewed-on: https://go-review.googlesource.com/16065 Reviewed-by: Andrew Gerrand <adg@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
d4a7ea1b71
commit
09eb58893f
2 changed files with 10 additions and 2 deletions
|
|
@ -1808,6 +1808,7 @@ type Server struct {
|
|||
|
||||
disableKeepAlives int32 // accessed atomically.
|
||||
nextProtoOnce sync.Once // guards initialization of TLSNextProto in Serve
|
||||
nextProtoErr error
|
||||
}
|
||||
|
||||
// A ConnState represents the state of a client connection to a server.
|
||||
|
|
@ -1898,6 +1899,10 @@ func (srv *Server) Serve(l net.Listener) error {
|
|||
defer l.Close()
|
||||
var tempDelay time.Duration // how long to sleep on accept failure
|
||||
srv.nextProtoOnce.Do(srv.setNextProtoDefaults)
|
||||
if srv.nextProtoErr != nil {
|
||||
// Error from http2 ConfigureServer (e.g. bad ciphersuites)
|
||||
return srv.nextProtoErr
|
||||
}
|
||||
for {
|
||||
rw, e := l.Accept()
|
||||
if e != nil {
|
||||
|
|
@ -2054,11 +2059,13 @@ func (srv *Server) ListenAndServeTLS(certFile, keyFile string) error {
|
|||
return srv.Serve(tlsListener)
|
||||
}
|
||||
|
||||
// setNextProtoDefaults configures HTTP/2.
|
||||
// It must only be called via srv.nextProtoOnce.
|
||||
func (srv *Server) setNextProtoDefaults() {
|
||||
// Enable HTTP/2 by default if the user hasn't otherwise
|
||||
// configured their TLSNextProto map.
|
||||
if srv.TLSNextProto == nil {
|
||||
http2ConfigureServer(srv, nil)
|
||||
srv.nextProtoErr = http2ConfigureServer(srv, nil)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue