protected function asyncWrite($stream, $o)
{
$stream_id = (int) $stream;
if (isset($o->requests[$stream_id])) {
$request = $o->requests[$stream_id];
} else {
if ($o->current < $o->count) {
$request = $this->createRequest($o->current, $o->buffers[$o->current]);
$o->requests[$stream_id] = $request;
unset($o->buffers[$o->current]);
$o->current++;
} else {
$this->removeStream($stream, $o->writepool);
return;
}
}
$sent = @fwrite($stream, $request->buffer, $request->length);
if ($sent === false) {
$o->results[$request->index]->reject($this->getLastError('request write error'));
$this->free($o, $request->index);
@fclose($stream);
$this->removeStream($stream, $o->writepool);
return;
}
if ($sent < $request->length) {
$request->buffer = substr($request->buffer, $sent);
$request->length -= $sent;
} else {
$this->afterWrite($request, $stream, $o);
}
}