Add ArtPoll backoff when hearing polls from other sources
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
17
discovery.go
17
discovery.go
@@ -32,6 +32,8 @@ type Discovery struct {
|
||||
pollTargets []*net.UDPAddr
|
||||
done chan struct{}
|
||||
onChange func(*Node)
|
||||
lastPollHeard time.Time
|
||||
pollMu sync.Mutex
|
||||
}
|
||||
|
||||
func NewDiscovery(sender *Sender, shortName, longName string, inputUnivs, outputUnivs []Universe, pollTargets []*net.UDPAddr) *Discovery {
|
||||
@@ -86,6 +88,14 @@ func (d *Discovery) pollLoop() {
|
||||
}
|
||||
|
||||
func (d *Discovery) sendPolls() {
|
||||
d.pollMu.Lock()
|
||||
lastHeard := d.lastPollHeard
|
||||
d.pollMu.Unlock()
|
||||
|
||||
if time.Since(lastHeard) < 15*time.Second {
|
||||
return
|
||||
}
|
||||
|
||||
for _, target := range d.pollTargets {
|
||||
d.sender.SendPoll(target)
|
||||
}
|
||||
@@ -145,6 +155,13 @@ func (d *Discovery) HandlePollReply(src *net.UDPAddr, pkt *PollReplyPacket) {
|
||||
}
|
||||
|
||||
func (d *Discovery) HandlePoll(src *net.UDPAddr) {
|
||||
localIP := net.IP(d.localIP[:])
|
||||
if !src.IP.Equal(localIP) {
|
||||
d.pollMu.Lock()
|
||||
d.lastPollHeard = time.Now()
|
||||
d.pollMu.Unlock()
|
||||
}
|
||||
|
||||
if d.receiver == nil {
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user