GNUNET_SCHEDULER_TaskIdentifier reconnect_task;
/**
- * Timeout.
+ * Timeout for the operation overall.
*/
struct GNUNET_TIME_Absolute timeout;
*/
struct GNUNET_TIME_Absolute receive_timeout;
+ /**
+ * Current value for our incremental back-off (for
+ * connect re-tries).
+ */
+ struct GNUNET_TIME_Relative back_off;
+
/**
* Number of bytes in received_buf that are valid.
*/
ret->sched = sched;
ret->service_name = GNUNET_strdup (service_name);
ret->cfg = GNUNET_CONFIGURATION_dup (cfg);
+ ret->back_off = GNUNET_TIME_UNIT_MILLISECONDS;
return ret;
}
th->sock->sock = do_connect (th->sock->sched,
th->sock->service_name, th->sock->cfg);
GNUNET_assert (NULL != th->sock->sock);
- delay = GNUNET_TIME_relative_min (delay, GNUNET_TIME_UNIT_SECONDS);
+ delay = GNUNET_TIME_relative_min (delay, th->sock->back_off);
+ th->sock->back_off
+ = GNUNET_TIME_relative_min (GNUNET_TIME_relative_multiply (th->sock->back_off, 2),
+ GNUNET_TIME_UNIT_SECONDS);
#if DEBUG_CLIENT
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Transmission failed %u times, trying again in %llums.\n",