|
@ -295,7 +295,6 @@ func (sw *Switch) startInitPeer(peer *peer) { |
|
|
|
|
|
|
|
|
// DialSeeds dials a list of seeds asynchronously in random order.
|
|
|
// DialSeeds dials a list of seeds asynchronously in random order.
|
|
|
func (sw *Switch) DialSeeds(addrBook *AddrBook, seeds []string) error { |
|
|
func (sw *Switch) DialSeeds(addrBook *AddrBook, seeds []string) error { |
|
|
|
|
|
|
|
|
netAddrs, err := NewNetAddressStrings(seeds) |
|
|
netAddrs, err := NewNetAddressStrings(seeds) |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
return err |
|
|
return err |
|
@ -315,11 +314,15 @@ func (sw *Switch) DialSeeds(addrBook *AddrBook, seeds []string) error { |
|
|
addrBook.Save() |
|
|
addrBook.Save() |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Ensure we have a completely undeterministic PRNG. cmd.RandInt64() draws
|
|
|
|
|
|
// from a seed that's initialized with OS entropy on process start.
|
|
|
|
|
|
rng := rand.New(rand.NewSource(cmn.RandInt64())) |
|
|
|
|
|
|
|
|
// permute the list, dial them in random order.
|
|
|
// permute the list, dial them in random order.
|
|
|
perm := rand.Perm(len(netAddrs)) |
|
|
|
|
|
|
|
|
perm := rng.Perm(len(netAddrs)) |
|
|
for i := 0; i < len(perm); i++ { |
|
|
for i := 0; i < len(perm); i++ { |
|
|
go func(i int) { |
|
|
go func(i int) { |
|
|
time.Sleep(time.Duration(rand.Int63n(3000)) * time.Millisecond) |
|
|
|
|
|
|
|
|
time.Sleep(time.Duration(rng.Int63n(3000)) * time.Millisecond) |
|
|
j := perm[i] |
|
|
j := perm[i] |
|
|
sw.dialSeed(netAddrs[j]) |
|
|
sw.dialSeed(netAddrs[j]) |
|
|
}(i) |
|
|
}(i) |
|
|