Support IPv6->IPv4 fallback in HTTP streaming.

Bug: 4068057
Change-Id: I425f65a99eb9e0986d9e9c0e264c3c8f61fcfdbd
This commit is contained in:
Lorenzo Colitti
2011-02-03 16:41:34 -08:00
parent b9da16a1e3
commit bd0e806a61

View File

@@ -150,31 +150,41 @@ status_t HTTPStream::connect(const char *server, int port) {
}
CHECK_EQ(mSocket, -1);
mSocket = socket(ai[0].ai_family, ai[0].ai_socktype, ai[0].ai_protocol);
if (mSocket < 0) {
freeaddrinfo(ai);
return UNKNOWN_ERROR;
}
setReceiveTimeout(30); // Time out reads after 30 secs by default
mState = CONNECTING;
status_t res = -1;
struct addrinfo *tmp;
for (tmp = ai; tmp; tmp = tmp->ai_next) {
mSocket = socket(tmp->ai_family, tmp->ai_socktype, tmp->ai_protocol);
if (mSocket < 0) {
continue;
}
int s = mSocket;
setReceiveTimeout(30); // Time out reads after 30 secs by default.
mLock.unlock();
int s = mSocket;
status_t res = MyConnect(s, ai[0].ai_addr, ai[0].ai_addrlen);
mLock.unlock();
res = MyConnect(s, tmp->ai_addr, tmp->ai_addrlen);
mLock.lock();
if (mState != CONNECTING) {
close(s);
freeaddrinfo(ai);
return UNKNOWN_ERROR;
}
if (res == OK) {
break;
}
close(s);
}
freeaddrinfo(ai);
mLock.lock();
if (mState != CONNECTING) {
return UNKNOWN_ERROR;
}
if (res != OK) {
close(mSocket);
mSocket = -1;