am bd0e806a: Support IPv6->IPv4 fallback in HTTP streaming.

* commit 'bd0e806a61df9b67890dc3b1390db554e7468b4a':
  Support IPv6->IPv4 fallback in HTTP streaming.
This commit is contained in:
Lorenzo Colitti
2011-03-09 15:09:20 -08:00
committed by Android Git Automerger

View File

@@ -150,31 +150,41 @@ status_t HTTPStream::connect(const char *server, int port) {
} }
CHECK_EQ(mSocket, -1); 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; 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); freeaddrinfo(ai);
mLock.lock();
if (mState != CONNECTING) {
return UNKNOWN_ERROR;
}
if (res != OK) { if (res != OK) {
close(mSocket); close(mSocket);
mSocket = -1; mSocket = -1;