public function readAndWrite(bool
$blocking, bool
$close = false
): array
{ $this->
unblock();
$w =
$this->
write();
$read =
$e =
[];
$r =
$this->pipes;
unset($r[0
]);
// let's have a look if something changed in streams
set_error_handler($this->
handleError(...
));
if (($r ||
$w) && false ===
stream_select($r,
$w,
$e, 0,
$blocking ? Process::TIMEOUT_PRECISION * 1E6 : 0
)) { restore_error_handler();
// if a system call has been interrupted, forget about it, let's try again
// otherwise, an error occurred, let's reset pipes
if (!
$this->
hasSystemCallBeenInterrupted()) { $this->pipes =
[];
} return $read;
} restore_error_handler();