aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/salticidae/network.h9
1 files changed, 6 insertions, 3 deletions
diff --git a/include/salticidae/network.h b/include/salticidae/network.h
index 432e713..40f17a1 100644
--- a/include/salticidae/network.h
+++ b/include/salticidae/network.h
@@ -399,6 +399,7 @@ class PeerNetwork: public MsgNetwork<OpcodeType> {
double retry_delay;
int32_t ntry;
+ int32_t cur_ntry;
TimerEvent ev_retry_timer;
/** the underlying connection, may be invalid when connected = false */
@@ -421,7 +422,7 @@ class PeerNetwork: public MsgNetwork<OpcodeType> {
id(pid),
nonce(passive_nonce),
id_hex(get_hex10(id)),
- retry_delay(0), ntry(0),
+ retry_delay(0), ntry(0), cur_ntry(0),
ev_ping_timer(
TimerEvent(pn->disp_ec, std::bind(&Peer::ping_timer, this, _1))),
ping_period(pn->ping_period),
@@ -815,8 +816,8 @@ void PeerNetwork<O, _, __>::on_teardown(const ConnPool::conn_t &_conn) {
});
}
/* auto retry the connection */
- if (p->ntry > 0) p->ntry--;
- if (p->ntry)
+ if (p->cur_ntry > 0) p->cur_ntry--;
+ if (p->cur_ntry)
p->ev_retry_timer.add(
p->state == Peer::State::RESET ?
0 : gen_rand_timeout(p->retry_delay));
@@ -863,6 +864,7 @@ void PeerNetwork<O, _, __>::finish_handshake(Peer *p) {
p->reset_ping_timer();
p->send_ping();
p->ev_retry_timer.del();
+ p->cur_ntry = p->ntry;
auto &old_conn = p->conn;
auto &new_conn = p->chosen_conn;
if (old_conn)
@@ -1125,6 +1127,7 @@ int32_t PeerNetwork<O, _, __>::conn_peer(const PeerId &pid, int32_t ntry, double
if (p->addr.is_null())
throw PeerNetworkError(SALTI_ERROR_PEER_NOT_READY);
p->ntry = ntry;
+ p->cur_ntry = ntry;
p->retry_delay = retry_delay;
p->inbound_conn = nullptr;
p->outbound_conn = nullptr;