forked from mirror/redcon
Fix redcon.Serve never returning.
Server should return when the base Listener has been closed. See #46
This commit is contained in:
parent
30bcac2aaa
commit
e0f7ba0ab8
42
redcon.go
42
redcon.go
|
@ -143,14 +143,12 @@ func NewServerNetwork(
|
||||||
if handler == nil {
|
if handler == nil {
|
||||||
panic("handler is nil")
|
panic("handler is nil")
|
||||||
}
|
}
|
||||||
s := &Server{
|
s := newServer()
|
||||||
net: net,
|
s.net = net
|
||||||
laddr: laddr,
|
s.laddr = laddr
|
||||||
handler: handler,
|
s.handler = handler
|
||||||
accept: accept,
|
s.accept = accept
|
||||||
closed: closed,
|
s.closed = closed
|
||||||
conns: make(map[*conn]bool),
|
|
||||||
}
|
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -221,22 +219,26 @@ func (s *TLSServer) ListenAndServe() error {
|
||||||
return s.ListenServeAndSignal(nil)
|
return s.ListenServeAndSignal(nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func newServer() *Server {
|
||||||
|
s := &Server{
|
||||||
|
conns: make(map[*conn]bool),
|
||||||
|
}
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
// Serve creates a new server and serves with the given net.Listener.
|
// Serve creates a new server and serves with the given net.Listener.
|
||||||
func Serve(ln net.Listener,
|
func Serve(ln net.Listener,
|
||||||
handler func(conn Conn, cmd Command),
|
handler func(conn Conn, cmd Command),
|
||||||
accept func(conn Conn) bool,
|
accept func(conn Conn) bool,
|
||||||
closed func(conn Conn, err error),
|
closed func(conn Conn, err error),
|
||||||
) error {
|
) error {
|
||||||
s := &Server{
|
s := newServer()
|
||||||
net: ln.Addr().Network(),
|
s.net = ln.Addr().Network()
|
||||||
laddr: ln.Addr().String(),
|
s.laddr = ln.Addr().String()
|
||||||
ln: ln,
|
s.ln = ln
|
||||||
handler: handler,
|
s.handler = handler
|
||||||
accept: accept,
|
s.accept = accept
|
||||||
closed: closed,
|
s.closed = closed
|
||||||
conns: make(map[*conn]bool),
|
|
||||||
}
|
|
||||||
|
|
||||||
return serve(s)
|
return serve(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -345,6 +347,10 @@ func serve(s *Server) error {
|
||||||
if done {
|
if done {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
if errors.Is(err, net.ErrClosed) {
|
||||||
|
// see https://github.com/tidwall/redcon/issues/46
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if s.AcceptError != nil {
|
if s.AcceptError != nil {
|
||||||
s.AcceptError(err)
|
s.AcceptError(err)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue