aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--p2p/discover/udp.go8
-rw-r--r--p2p/discover/udp_test.go14
2 files changed, 19 insertions, 3 deletions
diff --git a/p2p/discover/udp.go b/p2p/discover/udp.go
index ab3559ad8..2b215b45c 100644
--- a/p2p/discover/udp.go
+++ b/p2p/discover/udp.go
@@ -510,9 +510,15 @@ func (req *findnode) handle(t *udp, from *net.UDPAddr, fromID NodeID, mac []byte
closestrpc[i] = nodeToRPC(n)
}
t.send(from, neighborsPacket, neighbors{
- Nodes: closestrpc,
+ Nodes: closestrpc[:13],
Expiration: uint64(time.Now().Add(expiration).Unix()),
})
+ if len(closestrpc) > 13 {
+ t.send(from, neighborsPacket, neighbors{
+ Nodes: closestrpc[13:],
+ Expiration: uint64(time.Now().Add(expiration).Unix()),
+ })
+ }
return nil
}
diff --git a/p2p/discover/udp_test.go b/p2p/discover/udp_test.go
index f175835a8..ae9e41251 100644
--- a/p2p/discover/udp_test.go
+++ b/p2p/discover/udp_test.go
@@ -163,9 +163,19 @@ func TestUDP_findnode(t *testing.T) {
))
// check that closest neighbors are returned.
test.packetIn(nil, findnodePacket, &findnode{Target: testTarget, Expiration: futureExp})
+ expected := test.table.closest(targetHash, bucketSize)
test.waitPacketOut(func(p *neighbors) {
- expected := test.table.closest(targetHash, bucketSize)
- if len(p.Nodes) != bucketSize {
+ if len(p.Nodes) != 13 {
+ t.Errorf("wrong number of results: got %d, want %d", len(p.Nodes), bucketSize)
+ }
+ for i := range p.Nodes {
+ if p.Nodes[i].ID != expected.entries[i].ID {
+ t.Errorf("result mismatch at %d:\n got: %v\n want: %v", i, p.Nodes[i], expected.entries[i])
+ }
+ }
+ })
+ test.waitPacketOut(func(p *neighbors) {
+ if len(p.Nodes) != 3 {
t.Errorf("wrong number of results: got %d, want %d", len(p.Nodes), bucketSize)
}
for i := range p.Nodes {