|
@@ -27,6 +27,7 @@ class SocketHandler extends AbstractProcessingHandler
|
|
|
private $timeout = 0;
|
|
private $timeout = 0;
|
|
|
private $writingTimeout = 10;
|
|
private $writingTimeout = 10;
|
|
|
private $lastSentBytes = null;
|
|
private $lastSentBytes = null;
|
|
|
|
|
+ private $chunkSize = null;
|
|
|
private $persistent = false;
|
|
private $persistent = false;
|
|
|
private $errno;
|
|
private $errno;
|
|
|
private $errstr;
|
|
private $errstr;
|
|
@@ -127,6 +128,16 @@ class SocketHandler extends AbstractProcessingHandler
|
|
|
$this->writingTimeout = (float) $seconds;
|
|
$this->writingTimeout = (float) $seconds;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * Set chunk size. Only has effect during connection in the writing cycle.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param float $bytes
|
|
|
|
|
+ */
|
|
|
|
|
+ public function setChunkSize($bytes)
|
|
|
|
|
+ {
|
|
|
|
|
+ $this->chunkSize = $bytes;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* Get current connection string
|
|
* Get current connection string
|
|
|
*
|
|
*
|
|
@@ -177,6 +188,16 @@ class SocketHandler extends AbstractProcessingHandler
|
|
|
return $this->writingTimeout;
|
|
return $this->writingTimeout;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * Get current chunk size
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return float
|
|
|
|
|
+ */
|
|
|
|
|
+ public function getChunkSize()
|
|
|
|
|
+ {
|
|
|
|
|
+ return $this->chunkSize;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* Check to see if the socket is currently available.
|
|
* Check to see if the socket is currently available.
|
|
|
*
|
|
*
|
|
@@ -219,6 +240,16 @@ class SocketHandler extends AbstractProcessingHandler
|
|
|
return stream_set_timeout($this->resource, $seconds, $microseconds);
|
|
return stream_set_timeout($this->resource, $seconds, $microseconds);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * Wrapper to allow mocking
|
|
|
|
|
+ *
|
|
|
|
|
+ * @see http://php.net/manual/en/function.stream-set-chunk-size.php
|
|
|
|
|
+ */
|
|
|
|
|
+ protected function streamSetChunkSize()
|
|
|
|
|
+ {
|
|
|
|
|
+ return stream_set_chunk_size($this->resource, $this->chunkSize);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* Wrapper to allow mocking
|
|
* Wrapper to allow mocking
|
|
|
*/
|
|
*/
|
|
@@ -268,6 +299,7 @@ class SocketHandler extends AbstractProcessingHandler
|
|
|
{
|
|
{
|
|
|
$this->createSocketResource();
|
|
$this->createSocketResource();
|
|
|
$this->setSocketTimeout();
|
|
$this->setSocketTimeout();
|
|
|
|
|
+ $this->setStreamChunkSize();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private function createSocketResource()
|
|
private function createSocketResource()
|
|
@@ -290,6 +322,13 @@ class SocketHandler extends AbstractProcessingHandler
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private function setStreamChunkSize()
|
|
|
|
|
+ {
|
|
|
|
|
+ if ($this->chunkSize && !$this->streamSetChunkSize()) {
|
|
|
|
|
+ throw new \UnexpectedValueException("Failed setting chunk size with stream_set_chunk_size()");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private function writeToSocket($data)
|
|
private function writeToSocket($data)
|
|
|
{
|
|
{
|
|
|
$length = strlen($data);
|
|
$length = strlen($data);
|