Permalink
Browse files

Enabled float timeouts in SocketHandler

  • Loading branch information...
1 parent 59fb9f4 commit 26adcea58256d07316a75c143d1afa4f0a1d9bb0 @hason hason committed Aug 2, 2012
Showing with 16 additions and 13 deletions.
  1. +12 −9 src/Monolog/Handler/SocketHandler.php
  2. +4 −4 tests/Monolog/Handler/SocketHandlerTest.php
@@ -89,7 +89,7 @@ public function setPersistent($boolean)
/**
* 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 @@ public function setConnectionTimeout($seconds)
/**
* 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 @@ protected function fsockopen()
/**
* 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 @@ protected function streamGetMetadata()
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)");
}
}
@@ -50,8 +50,8 @@ public function testBadConnectionTimeout()
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 @@ public function testBadTimeout()
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()

0 comments on commit 26adcea

Please sign in to comment.