diff --git a/responder/responder.go b/responder/responder.go index edc134ed..3b0d9699 100644 --- a/responder/responder.go +++ b/responder/responder.go @@ -60,7 +60,7 @@ type Responder interface { // Start a new responder. The returned channel is only used to stop the responder. // Send 'true' to make it stop -func (res *Server) NewResponder(h Responder, ch chan bool) os.Error { +func (res *Server) NewResponder(h Responder, stop chan bool) os.Error { var port string if len(res.Address) == 0 { // We cannot start responding without an addresss @@ -79,9 +79,9 @@ func (res *Server) NewResponder(h Responder, ch chan bool) os.Error { foreverTCP: for { select { - case <-ch: - ch <- true - /* stop listening */ + case <-stop: + stop <- true + close(stop) break foreverTCP case s := <-tch: if s.err != nil { @@ -98,8 +98,9 @@ func (res *Server) NewResponder(h Responder, ch chan bool) os.Error { foreverUDP: for { select { - case <-ch: - ch <- true // last echo + case <-stop: + stop <- true + close(stop) break foreverUDP case s := <-uch: if s.err != nil { diff --git a/responder/responder_test.go b/responder/responder_test.go index ad8d8722..098053fb 100644 --- a/responder/responder_test.go +++ b/responder/responder_test.go @@ -64,6 +64,9 @@ func TestResponder(t *testing.T) { var ts *myserv tch := make(chan bool) go st.NewResponder(ts, tch) - - time.Sleep(100 * 1e9) + time.Sleep(1 * 1e9) + uch<-true + tch<-true + <-uch + <-tch }