Skip to content

Commit e0f7ba0

Browse files
committed
Fix redcon.Serve never returning.
Server should return when the base Listener has been closed. See #46
1 parent 30bcac2 commit e0f7ba0

File tree

1 file changed

+24
-18
lines changed

1 file changed

+24
-18
lines changed

redcon.go

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -143,14 +143,12 @@ func NewServerNetwork(
143143
if handler == nil {
144144
panic("handler is nil")
145145
}
146-
s := &Server{
147-
net: net,
148-
laddr: laddr,
149-
handler: handler,
150-
accept: accept,
151-
closed: closed,
152-
conns: make(map[*conn]bool),
153-
}
146+
s := newServer()
147+
s.net = net
148+
s.laddr = laddr
149+
s.handler = handler
150+
s.accept = accept
151+
s.closed = closed
154152
return s
155153
}
156154

@@ -221,22 +219,26 @@ func (s *TLSServer) ListenAndServe() error {
221219
return s.ListenServeAndSignal(nil)
222220
}
223221

222+
func newServer() *Server {
223+
s := &Server{
224+
conns: make(map[*conn]bool),
225+
}
226+
return s
227+
}
228+
224229
// Serve creates a new server and serves with the given net.Listener.
225230
func Serve(ln net.Listener,
226231
handler func(conn Conn, cmd Command),
227232
accept func(conn Conn) bool,
228233
closed func(conn Conn, err error),
229234
) error {
230-
s := &Server{
231-
net: ln.Addr().Network(),
232-
laddr: ln.Addr().String(),
233-
ln: ln,
234-
handler: handler,
235-
accept: accept,
236-
closed: closed,
237-
conns: make(map[*conn]bool),
238-
}
239-
235+
s := newServer()
236+
s.net = ln.Addr().Network()
237+
s.laddr = ln.Addr().String()
238+
s.ln = ln
239+
s.handler = handler
240+
s.accept = accept
241+
s.closed = closed
240242
return serve(s)
241243
}
242244

@@ -345,6 +347,10 @@ func serve(s *Server) error {
345347
if done {
346348
return nil
347349
}
350+
if errors.Is(err, net.ErrClosed) {
351+
// see https://github.com/tidwall/redcon/issues/46
352+
return nil
353+
}
348354
if s.AcceptError != nil {
349355
s.AcceptError(err)
350356
}

0 commit comments

Comments
 (0)