connect: Try next ip directly after immediate connect fail

This fixes a rare Happy Eyeballs bug where if the first IP family runs
out of addresses before the second-family-timer fires, and the second
IP family's first connect fails immediately, no further IPs of the
second family are attempted.
This commit is contained in:
Björn Stenberg 2013-11-26 00:04:28 +01:00 коммит произвёл Daniel Stenberg
Родитель 030a2b8cb8
Коммит b2a55c8106
1 изменённых файлов: 12 добавлений и 5 удалений

Просмотреть файл

@ -560,12 +560,19 @@ static CURLcode trynextip(struct connectdata *conn,
ai = conn->tempaddr[0]->ai_next;
}
while(ai && ai->ai_family != family)
ai = ai->ai_next;
while(ai) {
while(ai && ai->ai_family != family)
ai = ai->ai_next;
if(ai) {
rc = singleipconnect(conn, ai, &conn->tempsock[tempindex]);
conn->tempaddr[tempindex] = ai;
if(ai) {
rc = singleipconnect(conn, ai, &conn->tempsock[tempindex]);
conn->tempaddr[tempindex] = ai;
if(rc == CURLE_COULDNT_CONNECT) {
ai = ai->ai_next;
continue;
}
}
break;
}
}