Skip to content

Commit bd0e806

Browse files
committed
Support IPv6->IPv4 fallback in HTTP streaming.
Bug: 4068057 Change-Id: I425f65a99eb9e0986d9e9c0e264c3c8f61fcfdbd
1 parent b9da16a commit bd0e806

File tree

1 file changed

+24
-14
lines changed

1 file changed

+24
-14
lines changed

media/libstagefright/HTTPStream.cpp

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -150,31 +150,41 @@ status_t HTTPStream::connect(const char *server, int port) {
150150
}
151151

152152
CHECK_EQ(mSocket, -1);
153-
mSocket = socket(ai[0].ai_family, ai[0].ai_socktype, ai[0].ai_protocol);
154153

155-
if (mSocket < 0) {
156-
freeaddrinfo(ai);
157-
return UNKNOWN_ERROR;
158-
}
154+
mState = CONNECTING;
155+
status_t res = -1;
156+
struct addrinfo *tmp;
157+
for (tmp = ai; tmp; tmp = tmp->ai_next) {
158+
mSocket = socket(tmp->ai_family, tmp->ai_socktype, tmp->ai_protocol);
159+
if (mSocket < 0) {
160+
continue;
161+
}
159162

160-
setReceiveTimeout(30); // Time out reads after 30 secs by default
163+
setReceiveTimeout(30); // Time out reads after 30 secs by default.
161164

162-
mState = CONNECTING;
165+
int s = mSocket;
163166

164-
int s = mSocket;
167+
mLock.unlock();
165168

166-
mLock.unlock();
169+
res = MyConnect(s, tmp->ai_addr, tmp->ai_addrlen);
167170

168-
status_t res = MyConnect(s, ai[0].ai_addr, ai[0].ai_addrlen);
171+
mLock.lock();
169172

170-
freeaddrinfo(ai);
173+
if (mState != CONNECTING) {
174+
close(s);
175+
freeaddrinfo(ai);
176+
return UNKNOWN_ERROR;
177+
}
171178

172-
mLock.lock();
179+
if (res == OK) {
180+
break;
181+
}
173182

174-
if (mState != CONNECTING) {
175-
return UNKNOWN_ERROR;
183+
close(s);
176184
}
177185

186+
freeaddrinfo(ai);
187+
178188
if (res != OK) {
179189
close(mSocket);
180190
mSocket = -1;

0 commit comments

Comments
 (0)