Skip to content

Commit 3622fe1

Browse files
emersionpires
authored andcommitted
http2: return http.ErrServerClosed in Server.Serve
Mimick what net/http does: https://github.com/golang/go/blob/99d7121934a9cfa7963d3a9bfd840779fd2869f6/src/net/http/server.go#L3448
1 parent ef82c3b commit 3622fe1

2 files changed

Lines changed: 11 additions & 2 deletions

File tree

helper/http2/http2.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,9 @@ func (srv *Server) Serve(ln net.Listener) error {
106106
srv.errorLog().Printf("listener %q: accept error (retrying in %v): %v", ln.Addr(), delay, err)
107107
time.Sleep(delay)
108108
} else if err != nil {
109+
if srv.isClosed() {
110+
return http.ErrServerClosed
111+
}
109112
return fmt.Errorf("failed to accept connection: %w", err)
110113
}
111114

@@ -198,6 +201,12 @@ func (srv *Server) closeListeners() error {
198201
return err
199202
}
200203

204+
func (srv *Server) isClosed() bool {
205+
srv.mu.Lock()
206+
defer srv.mu.Unlock()
207+
return srv.closed
208+
}
209+
201210
// h1Listener is used to signal back http.Server's Close and Shutdown to the
202211
// HTTP/2 server.
203212
type h1Listener struct {

helper/http2/http2_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ func newTestServer(t *testing.T) (addr string, server *http.Server) {
190190

191191
t.Cleanup(func() {
192192
err := <-done
193-
if err != nil && !errors.Is(err, net.ErrClosed) {
193+
if err != nil && !errors.Is(err, http.ErrServerClosed) {
194194
t.Fatalf("failed to serve: %v", err)
195195
}
196196
})
@@ -231,7 +231,7 @@ func newTLSTestServer(t *testing.T) (addr string, server *http.Server) {
231231

232232
t.Cleanup(func() {
233233
err := <-done
234-
if err != nil && !errors.Is(err, net.ErrClosed) {
234+
if err != nil && !errors.Is(err, http.ErrServerClosed) {
235235
t.Fatalf("failed to serve: %v", err)
236236
}
237237
})

0 commit comments

Comments
 (0)