$tries) { $this->logger->warning('Could not connect to socket, retrying', [ 'error_message' => $errStr, 'error_number' => $errNo, ]); ++$tries; sleep(1); $socket = $openSocket($errNo, $errStr); } if (false !== $socket) { stream_set_timeout($socket, 60); } else { $this->logger->error('Unable to open socket', [ 'error_message' => $errStr, 'error_number' => $errNo, ]); throw new ApiClientException('Unable to open socket'); } return $socket; } private function send($socket, string $data): void { // message length is prepended to actual message $send = sprintf('%010s', strlen($data)) . $data; fwrite($socket, $send); } private function receive($socket): string { $response = ''; while (false === feof($socket)) { $response .= fread($socket, 4096); } return $response; } private function disconnect($socket): void { @fclose($socket); } }