Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(46)

Side by Side Diff: jingle/notifier/communicator/login.cc

Issue 3040052: Make libjingle resolve DNS synchronously to avoid crashes. (Closed)
Patch Set: Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <string> 5 #include <string>
6 6
7 #include "jingle/notifier/communicator/login.h" 7 #include "jingle/notifier/communicator/login.h"
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/time.h" 10 #include "base/time.h"
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 } 307 }
308 308
309 void Login::CheckConnection() { 309 void Login::CheckConnection() {
310 // We don't check the connection if we're using ChromeAsyncSocket, 310 // We don't check the connection if we're using ChromeAsyncSocket,
311 // as this code requires a libjingle thread to be running. This 311 // as this code requires a libjingle thread to be running. This
312 // code will go away in a future cleanup CL, anyway. 312 // code will go away in a future cleanup CL, anyway.
313 if (!use_chrome_async_socket_) { 313 if (!use_chrome_async_socket_) {
314 LOG(INFO) << "Checking connection"; 314 LOG(INFO) << "Checking connection";
315 talk_base::PhysicalSocketServer physical; 315 talk_base::PhysicalSocketServer physical;
316 scoped_ptr<talk_base::Socket> socket(physical.CreateSocket(SOCK_STREAM)); 316 scoped_ptr<talk_base::Socket> socket(physical.CreateSocket(SOCK_STREAM));
317 bool alive = 317 talk_base::SocketAddress addr("talk.google.com", 5222);
318 !socket->Connect(talk_base::SocketAddress("talk.google.com", 5222)); 318 // Resolve synchronously to avoid weirdness with libjingle's async
319 // DNS resolver.
320 bool alive = addr.ResolveIP() && (socket->Connect(addr) == 0);
319 LOG(INFO) << "Network is " << (alive ? "alive" : "not alive"); 321 LOG(INFO) << "Network is " << (alive ? "alive" : "not alive");
320 if (alive) { 322 if (alive) {
321 // Our connection is up. If we have a disconnect timer going, 323 // Our connection is up. If we have a disconnect timer going,
322 // stop it so we don't disconnect. 324 // stop it so we don't disconnect.
323 disconnect_timer_.Stop(); 325 disconnect_timer_.Stop();
324 } else { 326 } else {
325 // Our network connection is down. Start the disconnect timer if 327 // Our network connection is down. Start the disconnect timer if
326 // it's not already going. Don't disconnect immediately to avoid 328 // it's not already going. Don't disconnect immediately to avoid
327 // constant connection/disconnection due to flaky network 329 // constant connection/disconnection due to flaky network
328 // interfaces. 330 // interfaces.
(...skipping 14 matching lines...) Expand all
343 345
344 if (single_attempt_) { 346 if (single_attempt_) {
345 single_attempt_->Abort(); 347 single_attempt_->Abort();
346 single_attempt_ = NULL; 348 single_attempt_ = NULL;
347 } 349 }
348 350
349 StartConnection(); 351 StartConnection();
350 } 352 }
351 353
352 } // namespace notifier 354 } // namespace notifier
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698