private function doWrite(HttpTunnelStruct $struct)
{
$socket = $struct->socket;
$bytesToWrite = strlen($struct->writeBuffer);
$bytesWritten = @fwrite($socket, $struct->writeBuffer);
if ($bytesToWrite === $bytesWritten) {
\Amp\cancel($struct->writeWatcher);
$struct->parser = new Parser(Parser::MODE_RESPONSE);
$struct->parser->enqueueResponseMethodMatch('CONNECT');
$struct->readWatcher = \Amp\onReadable($socket, function () use($struct) {
$this->doRead($struct);
});
} elseif ($bytesWritten > 0) {
$struct->writeBuffer = substr($struct->writeBuffer, 0, $bytesWritten);
$this->enableWriteWatcher($struct);
} elseif ($this->isSocketDead($socket)) {
\Amp\cancel($struct->writeWatcher);
$struct->promisor->fail(new SocketException('Proxy CONNECT failed: socket went away while writing tunneling request'));
} else {
$this->enableWriteWatcher($struct);
}
}