File tree Expand file tree Collapse file tree 1 file changed +24
-14
lines changed
Expand file tree Collapse file tree 1 file changed +24
-14
lines changed Original file line number Diff line number Diff 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 ;
You can’t perform that action at this time.
0 commit comments