settings->net_heartbeat_interval_max = QDEVICE_NET_DEFAULT_HEARTBEAT_INTERVAL_MAX;
settings->net_min_connect_timeout = QDEVICE_NET_DEFAULT_MIN_CONNECT_TIMEOUT;
settings->net_max_connect_timeout = QDEVICE_NET_DEFAULT_MAX_CONNECT_TIMEOUT;
- settings->net_delay_before_reconnect = QDEVICE_NET_DEFAULT_DELAY_BEFORE_RECONNECT;
settings->net_test_algorithm_enabled = QDEVICE_NET_DEFAULT_TEST_ALGORITHM_ENABLED;
settings->master_wins = QDEVICE_ADVANCED_SETTINGS_MASTER_WINS_MODEL;
}
settings->net_max_connect_timeout = (uint32_t)tmpll;
- } else if (strcasecmp(option, "net_delay_before_reconnect") == 0) {
- tmpll = strtoll(value, &ep, 10);
- if (tmpll < QDEVICE_NET_MIN_DELAY_BEFORE_RECONNECT || errno != 0 || *ep != '\0') {
- return (-2);
- }
-
- settings->net_delay_before_reconnect = (int)tmpll;
} else if (strcasecmp(option, "net_test_algorithm_enabled") == 0) {
if ((tmpll = utils_parse_bool_str(value)) == -1) {
return (-2);
uint32_t net_heartbeat_interval_max;
uint32_t net_min_connect_timeout;
uint32_t net_max_connect_timeout;
- int net_delay_before_reconnect;
uint8_t net_test_algorithm_enabled;
};
int try_connect;
int res;
enum tlv_vote vote;
+ int delay_before_reconnect;
net_instance = instance->model_data;
net_instance->non_blocking_client.socket = NULL;
}
- qdevice_net_instance_clean(net_instance);
-
- if (try_connect) {
+ if (try_connect &&
+ net_instance->state != QDEVICE_NET_INSTANCE_STATE_WAITING_CONNECT) {
/*
* Give qnetd server a little time before reconnect
*/
- (void)poll(NULL, 0,
- random() % instance->advanced_settings->net_delay_before_reconnect);
+ delay_before_reconnect = random() %
+ (int)(net_instance->cast_vote_timer_interval * 0.9);
+
+ qdevice_log(LOG_DEBUG, "Sleeping for %u ms before reconnect",
+ delay_before_reconnect);
+ (void)poll(NULL, 0, delay_before_reconnect);
}
+
+ qdevice_net_instance_clean(net_instance);
}
return (0);
instance->skipping_msg = 0;
instance->msg_already_received_bytes = 0;
- instance->state = QDEVICE_NET_INSTANCE_STATE_WAITING_PREINIT_REPLY;
instance->echo_request_expected_msg_seq_num = instance->echo_reply_received_msg_seq_num;
instance->using_tls = 0;
instance->tls_client_cert_sent = 0;
+ instance->state = QDEVICE_NET_INSTANCE_STATE_WAITING_CONNECT;
instance->schedule_disconnect = 0;
instance->disconnect_reason = QDEVICE_NET_DISCONNECT_REASON_UNDEFINED;
#define QDEVICE_NET_DEFAULT_TEST_ALGORITHM_ENABLED 0
#endif
-#define QDEVICE_NET_DEFAULT_DELAY_BEFORE_RECONNECT (1000)
-#define QDEVICE_NET_MIN_DELAY_BEFORE_RECONNECT 1
-
/*
* Decision algorithms supported by qnetd
*/