From 26adcea58256d07316a75c143d1afa4f0a1d9bb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Haso=C5=88?= Date: Thu, 2 Aug 2012 13:10:43 +0200 Subject: [PATCH] Enabled float timeouts in SocketHandler --- src/Monolog/Handler/SocketHandler.php | 21 ++++++++++++--------- tests/Monolog/Handler/SocketHandlerTest.php | 8 ++++---- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/Monolog/Handler/SocketHandler.php b/src/Monolog/Handler/SocketHandler.php index b44fad78..c9e857b2 100644 --- a/src/Monolog/Handler/SocketHandler.php +++ b/src/Monolog/Handler/SocketHandler.php @@ -89,7 +89,7 @@ class SocketHandler extends AbstractProcessingHandler /** * Set connection timeout. Only has effect before we connect. * - * @param integer $seconds + * @param float $seconds * * @see http://php.net/manual/en/function.fsockopen.php */ @@ -102,14 +102,14 @@ class SocketHandler extends AbstractProcessingHandler /** * Set write timeout. Only has effect before we connect. * - * @param type $seconds + * @param float $seconds * * @see http://php.net/manual/en/function.stream-set-timeout.php */ public function setTimeout($seconds) { $this->validateTimeout($seconds); - $this->timeout = (int) $seconds; + $this->timeout = (float) $seconds; } /** @@ -183,10 +183,15 @@ class SocketHandler extends AbstractProcessingHandler /** * Wrapper to allow mocking + * + * @see http://php.net/manual/en/function.stream-set-timeout.php */ protected function streamSetTimeout() { - return stream_set_timeout($this->resource, $this->timeout); + $seconds = floor($this->timeout); + $microseconds = round(($this->timeout - $seconds)*1e6); + + return stream_set_timeout($this->resource, $seconds, $microseconds); } /** @@ -207,11 +212,9 @@ class SocketHandler extends AbstractProcessingHandler private function validateTimeout($value) { - $ok = filter_var($value, FILTER_VALIDATE_INT, array('options' => array( - 'min_range' => 0, - ))); - if ($ok === false) { - throw new \InvalidArgumentException("Timeout must be 0 or a positive integer (got $value)"); + $ok = filter_var($value, FILTER_VALIDATE_FLOAT); + if ($ok === false || $value < 0) { + throw new \InvalidArgumentException("Timeout must be 0 or a positive float (got $value)"); } } diff --git a/tests/Monolog/Handler/SocketHandlerTest.php b/tests/Monolog/Handler/SocketHandlerTest.php index e3013050..c642bea8 100644 --- a/tests/Monolog/Handler/SocketHandlerTest.php +++ b/tests/Monolog/Handler/SocketHandlerTest.php @@ -50,8 +50,8 @@ class SocketHandlerTest extends TestCase public function testSetConnectionTimeout() { $this->createHandler('localhost:1234'); - $this->handler->setConnectionTimeout(10); - $this->assertEquals(10, $this->handler->getConnectionTimeout()); + $this->handler->setConnectionTimeout(10.1); + $this->assertEquals(10.1, $this->handler->getConnectionTimeout()); } /** @@ -66,8 +66,8 @@ class SocketHandlerTest extends TestCase public function testSetTimeout() { $this->createHandler('localhost:1234'); - $this->handler->setTimeout(10); - $this->assertEquals(10, $this->handler->getTimeout()); + $this->handler->setTimeout(10.25); + $this->assertEquals(10.25, $this->handler->getTimeout()); } public function testSetConnectionString()