addWriteStream(STDOUT, function ($stdout) use ($loop, &$data) { // try to write data $r = fwrite($stdout, $data); // nothing could be written despite being writable => closed if ($r === 0) { $loop->removeWriteStream($stdout); fclose($stdout); stream_set_blocking($stdout, true); fwrite(STDERR, 'Stopped because STDOUT closed' . PHP_EOL); return; } // implement a very simple ring buffer, unless everything has been written at once: // everything written in this iteration will be appended for next iteration if (isset($data[$r])) { $data = substr($data, $r) . substr($data, 0, $r); } }); $loop->run();