From 31dc65b96b681c2565245a7c76d4b8e06e8fd88e Mon Sep 17 00:00:00 2001
From: Jeromy <jeromyj@gmail.com>
Date: Fri, 1 Aug 2014 18:07:09 -0700
Subject: [PATCH] clean up after listeners on shutdown

---
 swarm/swarm.go | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/swarm/swarm.go b/swarm/swarm.go
index 1ac277d0..d6cbcc72 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.
-- 
GitLab