From a1058c0d9797acbb4147b11bb9fcf206de3e00af Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Wed, 20 Dec 2017 15:32:07 +0700 Subject: [PATCH] make h2quic.Server.ListenAndServe error if it was closed before --- h2quic/server.go | 6 ++++++ h2quic/server_test.go | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/h2quic/server.go b/h2quic/server.go index 134ae9a86..329edfd0d 100644 --- a/h2quic/server.go +++ b/h2quic/server.go @@ -50,6 +50,7 @@ type Server struct { listenerMutex sync.Mutex listener quic.Listener + closed bool supportedVersionsAsString string } @@ -88,6 +89,10 @@ func (s *Server) serveImpl(tlsConfig *tls.Config, conn net.PacketConn) error { return errors.New("use of h2quic.Server without http.Server") } s.listenerMutex.Lock() + if s.closed { + s.listenerMutex.Unlock() + return errors.New("Server is already closed") + } if s.listener != nil { s.listenerMutex.Unlock() return errors.New("ListenAndServe may only be called once") @@ -242,6 +247,7 @@ func (s *Server) handleRequest(session streamCreator, headerStream quic.Stream, func (s *Server) Close() error { s.listenerMutex.Lock() defer s.listenerMutex.Unlock() + s.closed = true if s.listener != nil { err := s.listener.Close() s.listener = nil diff --git a/h2quic/server_test.go b/h2quic/server_test.go index 242652cfc..cf32ed5f2 100644 --- a/h2quic/server_test.go +++ b/h2quic/server_test.go @@ -410,6 +410,13 @@ var _ = Describe("H2 server", func() { Expect(err).NotTo(HaveOccurred()) }) + It("errors when ListenAndServer is called after Close", func() { + serv := &Server{Server: &http.Server{}} + Expect(serv.Close()).To(Succeed()) + err := serv.ListenAndServe() + Expect(err).To(MatchError("Server is already closed")) + }) + Context("ListenAndServe", func() { BeforeEach(func() { s.Server.Addr = "localhost:0"