From 37d83a4e2ecd53d744dbf294f1d4080384655da3 Mon Sep 17 00:00:00 2001 From: Ben Sidhom Date: Fri, 4 Jul 2014 13:47:54 -0700 Subject: [PATCH] Continue discovery on connect errors (fixes #324) Continues trying to connect to the discovery server at regular intervals despite failure. Whether or not to retry and retry interval should be specified in configuration (not currently in this fix). --- discover/discover.go | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/discover/discover.go b/discover/discover.go index 4eb82d38..ba0289fe 100644 --- a/discover/discover.go +++ b/discover/discover.go @@ -168,16 +168,21 @@ func (d *Discoverer) sendLocalAnnouncements() { } func (d *Discoverer) sendExternalAnnouncements() { + // this should go in the Discoverer struct + errorRetryIntv := 60 * time.Second + remote, err := net.ResolveUDPAddr("udp", d.extServer) - if err != nil { - l.Warnf("Global discovery: %v; no external announcements", err) - return + for err != nil { + l.Warnf("Global discovery: %v; trying again in %v", err, errorRetryIntv) + time.Sleep(errorRetryIntv) + remote, err = net.ResolveUDPAddr("udp", d.extServer) } conn, err := net.ListenUDP("udp", nil) - if err != nil { - l.Warnf("Global discovery: %v; no external announcements", err) - return + for err != nil { + l.Warnf("Global discovery: %v; trying again in %v", err, errorRetryIntv) + time.Sleep(errorRetryIntv) + conn, err = net.ListenUDP("udp", nil) } var buf []byte @@ -198,7 +203,7 @@ func (d *Discoverer) sendExternalAnnouncements() { l.Debugf("discover: send announcement -> %v\n%s", remote, hex.Dump(buf)) } - _, err = conn.WriteTo(buf, remote) + _, err := conn.WriteTo(buf, remote) if err != nil { if debug { l.Debugln("discover: warning:", err) @@ -222,7 +227,7 @@ func (d *Discoverer) sendExternalAnnouncements() { if ok { time.Sleep(d.globalBcastIntv) } else { - time.Sleep(60 * time.Second) + time.Sleep(errorRetryIntv) } } }