serveAddr = flag.String("serveAddr", ":0", "local UDP address")
infoHash = flag.String("infoHash", "", "torrent infohash")
- s *dht.Server
+ s *dht.Server
+ quitting = make(chan struct{})
)
func loadTable() error {
goodNodes := s.Nodes()
if *tableFileName == "" {
if len(goodNodes) != 0 {
- log.Printf("discarding %d good nodes!", len(goodNodes))
+ log.Print("good nodes were discarded because you didn't specify a table file")
}
return nil
}
signal.Notify(ch, os.Interrupt)
go func() {
<-ch
+ close(quitting)
s.Close()
}()
}
func main() {
seen := make(map[util.CompactPeer]struct{})
+getPeers:
for {
ps, err := s.GetPeers(*infoHash)
if err != nil {
}
}
}()
- time.Sleep(15 * time.Second)
+ select {
+ case <-time.After(15 * time.Second):
+ case <-quitting:
+ break getPeers
+ }
}
if err := saveTable(); err != nil {
log.Printf("error saving node table: %s", err)