From b191d8039831e2057dfbf79d0440f462a5fcc340 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elan=20Ruusam=C3=A4e?= Date: Tue, 3 Oct 2017 17:39:37 +0300 Subject: [PATCH 1/2] implement connect timeout parameter --- rdb/Connection.php | 28 +++++++++++++++++++++++++--- rdb/global.php | 9 +++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/rdb/Connection.php b/rdb/Connection.php index 5d7519c..4c5d388 100644 --- a/rdb/Connection.php +++ b/rdb/Connection.php @@ -22,16 +22,28 @@ class Connection extends DatumConverter private $password; private $activeTokens; private $timeout; + private $connectTimeout; private $ssl; public $defaultDbName; + /** + * @param array|string $optsOrHost + * @param int $port + * @param string $db + * @param string $apiKey + * @param int $timeout + * @param int $connectTimeout + * @throws RqlDriverError + * @throws \Exception + */ public function __construct( $optsOrHost = null, $port = null, $db = null, $apiKey = null, - $timeout = null + $timeout = null, + $connectTimeout = null ) { if (is_array($optsOrHost)) { $opts = $optsOrHost; @@ -67,6 +79,9 @@ public function __construct( if (isset($opts['timeout'])) { $timeout = $opts['timeout']; } + if (isset($opts['connectTimeout'])) { + $connectTimeout = $opts['connectTimeout']; + } if (isset($opts['ssl'])) { $ssl = $opts['ssl']; } @@ -106,6 +121,7 @@ public function __construct( $this->user = $user; $this->password = $password; $this->timeout = null; + $this->connectTimeout = $connectTimeout ?: ini_get("default_socket_timeout"); $this->ssl = $ssl; if (isset($db)) { @@ -430,6 +446,10 @@ private function applyTimeout($timeout) } } + /** + * @throws RqlDriverError + * @throws \Exception + */ private function connect() { if ($this->isOpen()) { @@ -446,12 +466,14 @@ private function connect() "ssl://" . $this->host . ":" . $this->port, $errno, $errstr, - ini_get("default_socket_timeout"), + $this->connectTimeout, STREAM_CLIENT_CONNECT, $context ); } else { - $this->socket = stream_socket_client("tcp://" . $this->host . ":" . $this->port, $errno, $errstr); + $this->socket = stream_socket_client("tcp://" . $this->host . ":" . $this->port, $errno, $errstr, + $this->connectTimeout + ); } if ($errno != 0 || $this->socket === false) { $this->socket = null; diff --git a/rdb/global.php b/rdb/global.php index 6a81fe2..fd68869 100644 --- a/rdb/global.php +++ b/rdb/global.php @@ -82,6 +82,15 @@ // ------------- Global functions in namespace r ------------- + +/** + * @param null $optsOrHost + * @param null $port + * @param null $db + * @param null $apiKey + * @param null $timeout + * @return Connection + */ function connect($optsOrHost = null, $port = null, $db = null, $apiKey = null, $timeout = null) { return new Connection($optsOrHost, $port, $db, $apiKey, $timeout); From 64d814919fe42fafaba8ce9a570f46d786f011b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elan=20Ruusam=C3=A4e?= Date: Wed, 4 Oct 2017 10:43:59 +0300 Subject: [PATCH 2/2] ensure $connectTimeout parameter for global wrapper as well --- rdb/global.php | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/rdb/global.php b/rdb/global.php index fd68869..ea2ea52 100644 --- a/rdb/global.php +++ b/rdb/global.php @@ -82,18 +82,20 @@ // ------------- Global functions in namespace r ------------- - /** - * @param null $optsOrHost - * @param null $port - * @param null $db - * @param null $apiKey - * @param null $timeout + * @param array|string $optsOrHost + * @param int $port + * @param string $db + * @param string $apiKey + * @param int $timeout + * @param int $connectTimeout * @return Connection + * @throws RqlDriverError + * @throws \Exception */ -function connect($optsOrHost = null, $port = null, $db = null, $apiKey = null, $timeout = null) +function connect($optsOrHost = null, $port = null, $db = null, $apiKey = null, $timeout = null, $connectTimeout = null) { - return new Connection($optsOrHost, $port, $db, $apiKey, $timeout); + return new Connection($optsOrHost, $port, $db, $apiKey, $timeout, $connectTimeout); } function db($dbName)