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);
|
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;
|
||||||
|
|||||||
Reference in New Issue
Block a user