|
|
@ -51,16 +51,9 @@ bool CAddrDb::Get_(CService &ip, int &wait) { |
|
|
|
int rnd = rand() % tot; |
|
|
|
int rnd = rand() % tot; |
|
|
|
int ret; |
|
|
|
int ret; |
|
|
|
if (rnd < unkId.size()) { |
|
|
|
if (rnd < unkId.size()) { |
|
|
|
if (rnd*10 < unkId.size()) { |
|
|
|
set<int>::iterator it = unkId.end(); it--; |
|
|
|
// once every 10 attempts, restart with the oldest unknown IP
|
|
|
|
|
|
|
|
set<int>::iterator it = unkId.begin(); |
|
|
|
|
|
|
|
ret = *it; |
|
|
|
ret = *it; |
|
|
|
} else { |
|
|
|
unkId.erase(it); |
|
|
|
// 90% of the time try the last learned IP
|
|
|
|
|
|
|
|
set<int>::reverse_iterator it = unkId.rbegin(); |
|
|
|
|
|
|
|
ret = *it; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
unkId.erase(ret); |
|
|
|
|
|
|
|
} else { |
|
|
|
} else { |
|
|
|
ret = ourId.front(); |
|
|
|
ret = ourId.front(); |
|
|
|
if (time(NULL) - idToInfo[ret].ourLastTry < MIN_RETRY) return false; |
|
|
|
if (time(NULL) - idToInfo[ret].ourLastTry < MIN_RETRY) return false; |
|
|
|