Skip to content

Commit

Permalink
Don't retry a failing IRC nickname forever.
Browse files Browse the repository at this point in the history
If our IRC nick is in use (because some other node thinks it has
the same address we think we have) don't fruitlessly try to reconnect
using that name forever. After three tries, give up and use a random
nick. Either we'll learn a new local address from IRC and switch
to that, or it was right and the other guy is advertising for us.

This avoids a pessimal case where a second testnet node behind
a nat is unable to get any peers because he can't get on IRC.
  • Loading branch information
gmaxwell committed Aug 29, 2012
1 parent 3595b18 commit 6a60c64
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion src/irc.cpp
Expand Up @@ -222,6 +222,7 @@ void ThreadIRCSeed2(void* parg)
printf("ThreadIRCSeed started\n");
int nErrorWait = 10;
int nRetryWait = 10;
int nNameRetry = 0;

while (!fShutdown)
{
Expand Down Expand Up @@ -257,7 +258,8 @@ void ThreadIRCSeed2(void* parg)
CService addrLocal;
string strMyName;
// Don't use our IP as our nick if we're not listening
if (!fNoListen && GetLocal(addrLocal, &addrIPv4))
// or if it keeps failing because the nick is already in use.
if (!fNoListen && GetLocal(addrLocal, &addrIPv4) && nNameRetry<3)
strMyName = EncodeAddress(GetLocalAddress(&addrConnect));
if (strMyName == "")
strMyName = strprintf("x%u", GetRand(1000000000));
Expand All @@ -273,6 +275,7 @@ void ThreadIRCSeed2(void* parg)
if (nRet == 2)
{
printf("IRC name already in use\n");
nNameRetry++;
Wait(10);
continue;
}
Expand All @@ -282,6 +285,7 @@ void ThreadIRCSeed2(void* parg)
else
return;
}
nNameRetry = 0;
Sleep(500);

// Get our external IP from the IRC server and re-nick before joining the channel
Expand Down

0 comments on commit 6a60c64

Please sign in to comment.