title: MongoConnectionException - No candidate servers found
body: <p>I am developing a PHP web application using a MongoDB replicaset to store my data.  I occasionally receive the following error:</p>
  
  <blockquote>
    <p>Fatal error: Uncaught exception 'MongoConnectionException' with message 'No candidate servers found'</p>
  </blockquote>
  
  <p>I have a 3 member Mongo replica set with 1 arbiter</p>
  
  <pre><code>rs0:PRIMARY&gt; rs.status()
  {
      "set" : "rs0",
      "date" : ISODate("2013-01-30T01:04:04Z"),
      "myState" : 1,
      "members" : [
          {
              "_id" : 0,
              "name" : "JenEricsMacPro.local:27017",
              "health" : 1,
              "state" : 1,
              "stateStr" : "PRIMARY",
              "uptime" : 844478,
              "optime" : Timestamp(1359507378000, 1),
              "optimeDate" : ISODate("2013-01-30T00:56:18Z"),
              "self" : true
          },
          {
              "_id" : 1,
              "name" : "ericsmacbookpro.local:27017",
              "health" : 1,
              "state" : 2,
              "stateStr" : "SECONDARY",
              "uptime" : 10720,
              "optime" : Timestamp(1359507378000, 1),
              "optimeDate" : ISODate("2013-01-30T00:56:18Z"),
              "lastHeartbeat" : ISODate("2013-01-30T01:04:04Z"),
              "pingMs" : 3
          },
          {
              "_id" : 2,
              "name" : "ericsmacbookair.local:27017",
              "health" : 1,
              "state" : 7,
              "stateStr" : "ARBITER",
              "uptime" : 1206,
              "lastHeartbeat" : ISODate("2013-01-30T01:04:03Z"),
              "pingMs" : 4
          },
          {
              "_id" : 3,
              "name" : "ericsmacxps.local:27017",
              "health" : 1,
              "state" : 2,
              "stateStr" : "SECONDARY",
              "uptime" : 75204,
              "optime" : Timestamp(1359507378000, 1),
              "optimeDate" : ISODate("2013-01-30T00:56:18Z"),
              "lastHeartbeat" : ISODate("2013-01-30T01:04:03Z"),
              "pingMs" : 1
          }
      ],
      "ok" : 1
  }
  </code></pre>
  
  <p>Below is an example of the code where I occasionally receive this error.</p>
  
  <pre><code>$mongoConfig = array (
      'uri' =&gt; 'mongodb://JenEricsMacPro.local:27017,ericsmacbookpro.local:27017,ericsmacxps.local:27017/',
      'database' =&gt; 'myDatabase',
      'replicaSetArray' =&gt; array('replicaSet' =&gt; 'rs0'));
  
  $connection = new MongoClient(
      $mongoConfig['uri'],
      $mongoConfig['replicaSetArray']);
  
  $connection-&gt;setReadPreference(MongoClient::RP_SECONDARY_PREFERRED);
  
  $db = $connection-&gt;selectDB($mongoConfig['database']);
  </code></pre>
  
  <p>Anyone have any idea what might be causing the 'No candidate servers found' message or any suggestions on how I could determine the root of the problem?</p>
  
  <p>All of my mongo.conf files are using the static IP of each server, no firewalls and DNS appears to be resolving correctly to the .local domain on my network.</p>
  
  <p>EDIT: I added logging, suggested by Derick, prior to instantiating MongoClient.</p>
  
  <pre><code>error_reporting (E_NOTICE);
  
  MongoLog::setModule( MongoLog::ALL );
  MongoLog::setLevel( MongoLog::ALL );
  </code></pre>
  
  <p>After enabling logging I received the following notices.  </p>
  
  <pre><code>Notice: PARSE INFO: Parsing mongodb://JenEricsMacPro.local:27017,ericsmacbookpro.local:27017,ericsmacxps.local:27017/ in MongoLogic.php on line 27
  Notice: PARSE INFO: - Found node: JenEricsMacPro.local:27017 in MongoLogic.php on line 27
  Notice: PARSE INFO: - Found node: ericsmacbookpro.local:27017 in MongoLogic.php on line 27
  Notice: PARSE INFO: - Found node: ericsmacxps.local:27017 in MongoLogic.php on line 27
  Notice: PARSE INFO: - Connection type: MULTIPLE in MongoLogic.php on line 27
  Notice: PARSE INFO: - Found option 'replicaSet': 'rs0' in MongoLogic.php on line 27
  Notice: PARSE INFO: - Switching connection type: REPLSET in MongoLogic.php on line 27
  Notice: CON INFO: mongo_get_read_write_connection: finding a REPLSET connection (read) in MongoLogic.php on line 27
  Notice: CON FINE: found connection JenEricsMacPro.local:27017;rs0;X;297 (looking for JenEricsMacPro.local:27017;rs0;X;297) in MongoLogic.php on line 27
  Notice: CON INFO: is_ping: pinging JenEricsMacPro.local:27017;rs0;X;297 in MongoLogic.php on line 27
  Notice: CON FINE: mongo_connection_destroy: Closing socket for JenEricsMacPro.local:27017;rs0;X;297. in MongoLogic.php on line 27
  Notice: CON INFO: freeing connection JenEricsMacPro.local:27017;rs0;X;297 in MongoLogic.php on line 27
  Notice: CON WARN: Couldn't connect to 'JenEricsMacPro.local:27017': send_package: error reading from socket: Operation timed out in MongoLogic.php on line 27
  Notice: CON FINE: found connection ericsmacbookpro.local:27017;rs0;X;297 (looking for ericsmacbookpro.local:27017;rs0;X;297) in MongoLogic.php on line 27
  Notice: CON INFO: is_ping: pinging ericsmacbookpro.local:27017;rs0;X;297 in MongoLogic.php on line 27
  Notice: CON FINE: mongo_connection_destroy: Closing socket for ericsmacbookpro.local:27017;rs0;X;297. in MongoLogic.php on line 27
  Notice: CON INFO: freeing connection ericsmacbookpro.local:27017;rs0;X;297 in MongoLogic.php on line 27
  Notice: CON WARN: Couldn't connect to 'ericsmacbookpro.local:27017': send_package: error reading from socket: Operation timed out in MongoLogic.php on line 27
  Notice: CON FINE: found connection ericsmacxps.local:27017;rs0;X;297 (looking for ericsmacxps.local:27017;rs0;X;297) in MongoLogic.php on line 27
  Notice: CON INFO: is_ping: pinging ericsmacxps.local:27017;rs0;X;297 in MongoLogic.php on line 27
  Notice: CON FINE: mongo_connection_destroy: Closing socket for ericsmacxps.local:27017;rs0;X;297. in MongoLogic.php on line 27
  Notice: CON INFO: freeing connection ericsmacxps.local:27017;rs0;X;297 in MongoLogic.php on line 27
  Notice: CON WARN: Couldn't connect to 'ericsmacxps.local:27017': send_package: error reading from socket: Operation timed out in MongoLogic.php on line 27
  Notice: CON FINE: discover_topology: checking ismaster for JenEricsMacPro.local:27017;rs0;X;297 in MongoLogic.php on line 27
  Notice: CON WARN: discover_topology: couldn't create a connection for JenEricsMacPro.local:27017;rs0;X;297 in MongoLogic.php on line 27
  Notice: CON FINE: discover_topology: checking ismaster for ericsmacbookpro.local:27017;rs0;X;297 in MongoLogic.php on line 27
  Notice: CON WARN: discover_topology: couldn't create a connection for ericsmacbookpro.local:27017;rs0;X;297 in MongoLogic.php on line 27
  Notice: CON FINE: discover_topology: checking ismaster for ericsmacxps.local:27017;rs0;X;297 in MongoLogic.php on line 27
  Notice: CON WARN: discover_topology: couldn't create a connection for ericsmacxps.local:27017;rs0;X;297 in MongoLogic.php on line 27
  Notice: REPLSET FINE: finding candidate servers in MongoLogic.php on line 27
  Notice: REPLSET FINE: - all servers in MongoLogic.php on line 27
  Notice: REPLSET FINE: filter_connections: adding connections: in MongoLogic.php on line 27
  Notice: REPLSET FINE: filter_connections: done in MongoLogic.php on line 27
  Notice: REPLSET FINE: limiting to servers with same replicaset name in MongoLogic.php on line 27
  Notice: REPLSET FINE: limiting to servers with same replicaset name: done in MongoLogic.php on line 27
  Notice: REPLSET FINE: limiting by credentials in MongoLogic.php on line 27
  Notice: REPLSET FINE: limiting by credentials: done in MongoLogic.php on line 27
  </code></pre>