@ -321,10 +321,17 @@ struct CNodeState {
*/
bool fSupportsDesiredCmpctVersion ;
/** State used to enforce CHAIN_SYNC_TIMEOUT
* Only in effect for outbound , non - manual , full - relay connections , with
* m_protect = = false
* Algorithm : if a peer ' s best known block has less work than our tip ,
/** State used to enforce CHAIN_SYNC_TIMEOUT and EXTRA_PEER_CHECK_INTERVAL logic.
*
* Both are only in effect for outbound , non - manual , non - protected connections .
* Any peer protected ( m_protect = true ) is not chosen for eviction . A peer is
* marked as protected if all of these are true :
* - its connection type is IsBlockOnlyConn ( ) = = false
* - it gave us a valid connecting header
* - we haven ' t reached MAX_OUTBOUND_PEERS_TO_PROTECT_FROM_DISCONNECT yet
* - it has a better chain than we have
*
* CHAIN_SYNC_TIMEOUT : if a peer ' s best known block has less work than our tip ,
* set a timeout CHAIN_SYNC_TIMEOUT seconds in the future :
* - If at timeout their best known block now has more work than our tip
* when the timeout was set , then either reset the timeout or clear it
@ -334,6 +341,9 @@ struct CNodeState {
* and set a shorter timeout , HEADERS_RESPONSE_TIME seconds in future .
* If their best known block is still behind when that new timeout is
* reached , disconnect .
*
* EXTRA_PEER_CHECK_INTERVAL : after each interval , if we have too many outbound peers ,
* drop the outbound one that least recently announced us a new block .
*/
struct ChainSyncTimeoutState {
//! A timeout used for checking whether our peer has sufficiently synced