5
0
mirror of https://github.com/cwinfo/yggdrasil-go.git synced 2024-09-20 03:42:32 +00:00

more work on backpressure, but still needs more testing

This commit is contained in:
Arceliar 2018-06-23 23:33:03 -05:00
parent 4b83efa218
commit 0ad801bcfe

View File

@ -588,18 +588,32 @@ func (t *switchTable) handleIn(packet []byte, idle map[switchPort]struct{}) bool
ports[0].sendPacket(packet) ports[0].sendPacket(packet)
return true return true
} }
table := t.getTable()
myDist := table.self.dist(coords)
var best *peer
bestDist := myDist
for port := range idle { for port := range idle {
if to := ports[port]; to != nil { if to := ports[port]; to != nil {
if t.portIsCloser(coords, port) { if info, isIn := table.elems[to.port]; isIn {
delete(idle, port) dist := info.locator.dist(coords)
to.sendPacket(packet) if !(dist < bestDist) {
continue
}
best = to
bestDist = dist
}
}
}
if best != nil {
// Send to the best idle next hop
delete(idle, best.port)
best.sendPacket(packet)
return true return true
} } else {
}
}
// Didn't find anyone idle to send it to // Didn't find anyone idle to send it to
return false return false
} }
}
// Handles incoming idle notifications // Handles incoming idle notifications
// Loops over packets and sends the newest one that's OK for this peer to send // Loops over packets and sends the newest one that's OK for this peer to send