// Save the current set of reachable DHT nodes to disk. func Save(filename string, dht *dht.DHT) error { d := doc{ NodeID: dht.NodeID(), } nodes := dht.ListReachableNodes() for i := range nodes { d.Nodes = append(d.Nodes, node{ NodeID: nodes[i].NodeID.String(), Addr: nodes[i].Addr.String(), }) } b, err := json.Marshal(&d) if err != nil { return err } tfilename := filename + ".tmp" defer os.Remove(tfilename) err = ioutil.WriteFile(tfilename, b, 0644) if err != nil { return err } return os.Rename(tfilename, filename) }