p2p/net/swarm/listener: consume peerstream listeners
Juan Batiz-Benet committed
Jan 11, 2015 at 12:46 UTC
4e2431a0e45b71cae77f31b6d379b772abd2c50c
1 file changed
+24
-2
p2p/net/swarm/swarm_listen.go
+24
-2
@@ -66,8 +66,30 @@ func (s *Swarm) setupListener(maddr ma.Multiaddr) error {
66
67
// AddListener to the peerstream Listener. this will begin accepting connections
68
// and streams!
69
- _, err = s.swarm.AddListener(list)
70
- return err
69
+ sl, err := s.swarm.AddListener(list)
70
+ if err != nil {
71
+ return err
72
+ }
73
+
74
+ // go consume peerstream's listen accept errors. note, these ARE errors.
75
+ // they may be killing the listener, and if we get _any_ we should be
76
+ // fixing this in our conn.Listener (to ignore them or handle them
77
+ // differently.)
78
+ go func(ctx context.Context, sl *ps.Listener) {
79
+ for {
80
+ select {
81
+ case err, more := <-sl.AcceptErrors():
82
+ if !more {
83
+ return
84
+ }
85
+ log.Info(err)
86
+ case <-ctx.Done():
87
+ return
88
+ }
89
+ }
90
+ }(s.cg.Context(), sl)
91
+
92
+ return nil
93
}
94
95
// connHandler is called by the StreamSwarm whenever a new connection is added