Support IPv6->IPv4 fallback in HTTP streaming.
Bug: 4068057 Change-Id: I425f65a99eb9e0986d9e9c0e264c3c8f61fcfdbd
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user