From 485fef4f07b9730bdf2685d6025a23446d24d198 Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Sun, 26 Apr 2020 11:41:27 -0700 Subject: [PATCH] fix: don't abort accept when accepting a single connection fails --- listen.go | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/listen.go b/listen.go index 2f0e60c..9b850d3 100644 --- a/listen.go +++ b/listen.go @@ -23,22 +23,24 @@ func (r *Relay) Listener() *RelayListener { } func (l *RelayListener) Accept() (manet.Conn, error) { - select { - case c := <-l.incoming: - err := l.Relay().writeResponse(c.stream, pb.CircuitRelay_SUCCESS) - if err != nil { - log.Debugf("error writing relay response: %s", err.Error()) - c.stream.Reset() - return nil, err + for { + select { + case c := <-l.incoming: + err := l.Relay().writeResponse(c.stream, pb.CircuitRelay_SUCCESS) + if err != nil { + log.Debugf("error writing relay response: %s", err.Error()) + c.stream.Reset() + continue + } + + // TODO: Pretty print. + log.Infof("accepted relay connection: %q", c) + + c.tagHop() + return c, nil + case <-l.ctx.Done(): + return nil, l.ctx.Err() } - - // TODO: Pretty print. - log.Infof("accepted relay connection: %q", c) - - c.tagHop() - return c, nil - case <-l.ctx.Done(): - return nil, l.ctx.Err() } }