diff --git a/lib/Predis/Connection/PhpiredisSocketConnection.php b/lib/Predis/Connection/PhpiredisSocketConnection.php index 108802e3..c495a89c 100644 --- a/lib/Predis/Connection/PhpiredisSocketConnection.php +++ b/lib/Predis/Connection/PhpiredisSocketConnection.php @@ -229,7 +229,7 @@ class PhpiredisSocketConnection extends AbstractConnection * @param ParametersInterface $parameters Parameters used to initialize the connection. * @return string */ - private static function getAddress(ParametersInterface $parameters) + protected static function getAddress(ParametersInterface $parameters) { if ($parameters->scheme === 'unix') { return $parameters->path; @@ -238,8 +238,8 @@ class PhpiredisSocketConnection extends AbstractConnection $host = $parameters->host; if (ip2long($host) === false) { - if (($addresses = gethostbynamel($host)) === false) { - $this->onConnectionError("Cannot resolve the address of '$host'."); + if (false === $addresses = gethostbynamel($host)) { + return false; } return $addresses[array_rand($addresses)]; @@ -256,7 +256,10 @@ class PhpiredisSocketConnection extends AbstractConnection */ private function connectWithTimeout(ParametersInterface $parameters) { - $host = self::getAddress($parameters); + if (false === $host = self::getAddress($parameters)) { + $this->onConnectionError("Cannot resolve the address of '$parameters->host'."); + } + $socket = $this->getResource(); socket_set_nonblock($socket); diff --git a/tests/Predis/Connection/PhpiredisSocketConnectionTest.php b/tests/Predis/Connection/PhpiredisSocketConnectionTest.php index 53e3fadc..acf33bdc 100644 --- a/tests/Predis/Connection/PhpiredisSocketConnectionTest.php +++ b/tests/Predis/Connection/PhpiredisSocketConnectionTest.php @@ -86,6 +86,18 @@ class PhpiredisSocketConnectionTest extends PredisConnectionTestCase $this->assertSame(array('foo', 'hoge', 'lol'), $connection->executeCommand($cmdLrange)); } + /** + * @group connected + * @expectedException Predis\Connection\ConnectionException + * @expectedExceptionMessage Cannot resolve the address of 'bogus.tld'. + */ + public function testThrowsExceptionOnUnresolvableHostname() + { + $parameters = $this->getParameters(array('host' => 'bogus.tld')); + $connection = new PhpiredisSocketConnection($parameters); + $connection->connect(); + } + /** * @group connected * @expectedException Predis\Protocol\ProtocolException