diff --git a/swarm/swarm.go b/swarm/swarm.go index 1ac277d0757f152c36e579833ea28f581cdf3afb..d6cbcc721fb073d4620d8eaea189a49b2af0d102 100644 --- a/swarm/swarm.go +++ b/swarm/swarm.go @@ -81,6 +81,7 @@ type Swarm struct { connsLock sync.RWMutex local *peer.Peer + listeners []net.Listener } // NewSwarm constructs a Swarm, with a Chan. @@ -126,6 +127,9 @@ func (s *Swarm) connListen(maddr *ma.Multiaddr) error { return err } + // NOTE: this may require a lock around it later. currently, only run on setup + s.listeners = append(s.listeners, list) + // Accept and handle new connections on this listener until it errors go func() { for { @@ -172,6 +176,10 @@ func (s *Swarm) Close() { } s.Chan.Close <- true // fan out s.Chan.Close <- true // listener + + for _,list := range s.listeners { + list.Close() + } } // Dial connects to a peer.