public function write($data)
{
if (!$this->isConnected()) {
$this->connect();
}
$length = strlen($data);
$sent = 0;
while ($this->isConnected() && $sent < $length) {
if (0 == $sent) {
$chunk = $this->fwrite($data);
} else {
$chunk = $this->fwrite(substr($data, $sent));
}
if ($chunk === false) {
throw new \RuntimeException('Could not write to socket');
}
$sent += $chunk;
$socketInfo = $this->streamGetMetadata();
if ($socketInfo['timed_out']) {
throw new \RuntimeException('Write timed-out');
}
}
}