@@ -143,14 +143,12 @@ func NewServerNetwork(
143
143
if handler == nil {
144
144
panic ("handler is nil" )
145
145
}
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
154
152
return s
155
153
}
156
154
@@ -221,22 +219,26 @@ func (s *TLSServer) ListenAndServe() error {
221
219
return s .ListenServeAndSignal (nil )
222
220
}
223
221
222
+ func newServer () * Server {
223
+ s := & Server {
224
+ conns : make (map [* conn ]bool ),
225
+ }
226
+ return s
227
+ }
228
+
224
229
// Serve creates a new server and serves with the given net.Listener.
225
230
func Serve (ln net.Listener ,
226
231
handler func (conn Conn , cmd Command ),
227
232
accept func (conn Conn ) bool ,
228
233
closed func (conn Conn , err error ),
229
234
) 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
240
242
return serve (s )
241
243
}
242
244
@@ -345,6 +347,10 @@ func serve(s *Server) error {
345
347
if done {
346
348
return nil
347
349
}
350
+ if errors .Is (err , net .ErrClosed ) {
351
+ // see https://github.com/tidwall/redcon/issues/46
352
+ return nil
353
+ }
348
354
if s .AcceptError != nil {
349
355
s .AcceptError (err )
350
356
}
0 commit comments