mirror of
https://github.com/eclipse-mosquitto/mosquitto.git
synced 2026-05-21 12:24:29 +02:00
Keep retrying to reconnect without calling loop on failure.
This commit is contained in:
parent
950db12c74
commit
abe72b8e4c
|
|
@ -940,40 +940,43 @@ int mosquitto_loop_forever(struct mosquitto *mosq, int timeout, int max_packets)
|
|||
if(errno == EPROTO){
|
||||
return rc;
|
||||
}
|
||||
pthread_mutex_lock(&mosq->state_mutex);
|
||||
if(mosq->state == mosq_cs_disconnecting){
|
||||
run = 0;
|
||||
pthread_mutex_unlock(&mosq->state_mutex);
|
||||
}else{
|
||||
pthread_mutex_unlock(&mosq->state_mutex);
|
||||
|
||||
if(mosq->reconnect_delay > 0 && mosq->reconnect_exponential_backoff){
|
||||
reconnect_delay = mosq->reconnect_delay*reconnects*reconnects;
|
||||
}else{
|
||||
reconnect_delay = mosq->reconnect_delay;
|
||||
}
|
||||
|
||||
if(reconnect_delay > mosq->reconnect_delay_max){
|
||||
reconnect_delay = mosq->reconnect_delay_max;
|
||||
}else{
|
||||
reconnects++;
|
||||
}
|
||||
|
||||
#ifdef WIN32
|
||||
Sleep(reconnect_delay*1000);
|
||||
#else
|
||||
sleep(reconnect_delay);
|
||||
#endif
|
||||
|
||||
do{
|
||||
rc = MOSQ_ERR_SUCCESS;
|
||||
pthread_mutex_lock(&mosq->state_mutex);
|
||||
if(mosq->state == mosq_cs_disconnecting){
|
||||
run = 0;
|
||||
pthread_mutex_unlock(&mosq->state_mutex);
|
||||
}else{
|
||||
pthread_mutex_unlock(&mosq->state_mutex);
|
||||
mosquitto_reconnect(mosq);
|
||||
|
||||
if(mosq->reconnect_delay > 0 && mosq->reconnect_exponential_backoff){
|
||||
reconnect_delay = mosq->reconnect_delay*reconnects*reconnects;
|
||||
}else{
|
||||
reconnect_delay = mosq->reconnect_delay;
|
||||
}
|
||||
|
||||
if(reconnect_delay > mosq->reconnect_delay_max){
|
||||
reconnect_delay = mosq->reconnect_delay_max;
|
||||
}else{
|
||||
reconnects++;
|
||||
}
|
||||
|
||||
#ifdef WIN32
|
||||
Sleep(reconnect_delay*1000);
|
||||
#else
|
||||
sleep(reconnect_delay);
|
||||
#endif
|
||||
|
||||
pthread_mutex_lock(&mosq->state_mutex);
|
||||
if(mosq->state == mosq_cs_disconnecting){
|
||||
run = 0;
|
||||
pthread_mutex_unlock(&mosq->state_mutex);
|
||||
}else{
|
||||
pthread_mutex_unlock(&mosq->state_mutex);
|
||||
rc = mosquitto_reconnect(mosq);
|
||||
}
|
||||
}
|
||||
}
|
||||
}while(run && rc != MOSQ_ERR_SUCCESS);
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue