From 4e2431a0e45b71cae77f31b6d379b772abd2c50c Mon Sep 17 00:00:00 2001 From: Juan Batiz-Benet Date: Sun, 11 Jan 2015 12:46:22 -0800 Subject: [PATCH] p2p/net/swarm/listener: consume peerstream listeners --- p2p/net/swarm/swarm_listen.go | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/p2p/net/swarm/swarm_listen.go b/p2p/net/swarm/swarm_listen.go index 3769cd52f..d6380b9b5 100644 --- a/p2p/net/swarm/swarm_listen.go +++ b/p2p/net/swarm/swarm_listen.go @@ -66,8 +66,30 @@ func (s *Swarm) setupListener(maddr ma.Multiaddr) error { // AddListener to the peerstream Listener. this will begin accepting connections // and streams! - _, err = s.swarm.AddListener(list) - return err + sl, err := s.swarm.AddListener(list) + if err != nil { + return err + } + + // go consume peerstream's listen accept errors. note, these ARE errors. + // they may be killing the listener, and if we get _any_ we should be + // fixing this in our conn.Listener (to ignore them or handle them + // differently.) + go func(ctx context.Context, sl *ps.Listener) { + for { + select { + case err, more := <-sl.AcceptErrors(): + if !more { + return + } + log.Info(err) + case <-ctx.Done(): + return + } + } + }(s.cg.Context(), sl) + + return nil } // connHandler is called by the StreamSwarm whenever a new connection is added