From f549dc92e853558833028a8c560f29827bd3a58c Mon Sep 17 00:00:00 2001 From: Josh Baker Date: Mon, 22 Aug 2016 10:53:04 -0700 Subject: [PATCH] added signal --- redcon.go | 12 ++++++++++++ redcon_test.go | 9 ++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/redcon.go b/redcon.go index 67d2035..ff81f37 100644 --- a/redcon.go +++ b/redcon.go @@ -93,14 +93,26 @@ func (s *Server) Close() error { // ListenAndServe serves incoming connections. func (s *Server) ListenAndServe() error { + return s.ListenServeAndSignal(nil) +} + +// ListenServeAndSignal serves incoming connections and passes nil or error +// when listening. signal can be nil. +func (s *Server) ListenServeAndSignal(signal chan error) error { var addr = s.addr var handler = s.handler var accept = s.accept var closed = s.closed ln, err := net.Listen("tcp", addr) if err != nil { + if signal != nil { + signal <- err + } return err } + if signal != nil { + signal <- nil + } s.ln = ln.(*net.TCPListener) defer func() { ln.Close() diff --git a/redcon_test.go b/redcon_test.go index 471320b..b534abd 100644 --- a/redcon_test.go +++ b/redcon_test.go @@ -292,7 +292,14 @@ func TestServer(t *testing.T) { t.Fatal("expecting array, got '%v'", res) } }() - err := s.ListenAndServe() + signal := make(chan error) + go func() { + err := s.ListenServeAndSignal(signal) + if err != nil { + t.Fatal(err) + } + }() + err := <-signal if err != nil { t.Fatal(err) }