Add backoff to handle slow android socket setup #1

Merged
dan merged 1 commits from android_backoff into trunk 2020-11-16 23:35:36 +00:00
1 changed files with 16 additions and 2 deletions

View File

@ -173,11 +173,25 @@ func Start(ctx context.Context, conf *StartConf) (*Tor, error) {
if err == nil {
err = tor.startProcess(ctx, conf)
}
time.Sleep(time.Second)
// Connect the controller
if err == nil {
err = tor.connectController(ctx, conf)
for attempts := 0; attempts < 10; attempts++ {
err = tor.connectController(ctx, conf)
if err == nil {
break
} else {
// backoff and retry
// max is 1 + 2 + 3 + 4 + 5...+10 = ~55 seconds
// After which point there is probably something else very wrong
// TODO: It might be worth breaking out the error here so that we can distinguish a
// slow socket (on e.g. Android) with a failed setup.
time.Sleep(time.Duration(int(time.Second) * attempts))
}
}
}
// Attempt eager auth w/ no password
if err == nil && !conf.DisableEagerAuth {
err = tor.Control.Authenticate("")