static int cstp_reconnect(struct openconnect_info *vpninfo)
{
- int retries, nr_retries, ret;
+ int ret;
+ int timeout;
+ int interval;
- nr_retries = vpninfo->reconnect_timeout / vpninfo->reconnect_interval;
+ timeout = vpninfo->reconnect_timeout;
+ interval = vpninfo->reconnect_interval;
while ((ret = make_cstp_connection(vpninfo))) {
- retries++;
- if (retries >= nr_retries)
+ if (timeout <= 0)
return ret;
- sleep(vpninfo->reconnect_interval);
+ vpninfo->progress(vpninfo, PRG_INFO,
+ "sleep %ds, remain timeout %ds\n",
+ interval, timeout);
+ sleep(interval);
+ timeout -= interval;
+ interval += vpninfo->reconnect_interval;
+ if (interval > RECONNECT_INTERVAL_MAX)
+ interval = RECONNECT_INTERVAL_MAX;
}
return 0;
}
vpninfo->deflate = 1;
vpninfo->dtls_attempt_period = 60;
vpninfo->max_qlen = 10;
- vpninfo->reconnect_interval = 20;
+ vpninfo->reconnect_interval = RECONNECT_INTERVAL_MIN;
vpninfo->reconnect_timeout = 300;
if (RAND_bytes(vpninfo->dtls_secret, sizeof(vpninfo->dtls_secret)) != 1) {
struct split_include *next;
};
+#define RECONNECT_INTERVAL_MIN 10
+#define RECONNECT_INTERVAL_MAX 100
+
struct openconnect_info {
char *redirect_url;