Scalr\LogCollector\Writers\AbstractWriter::writeSocket PHP Méthode

writeSocket() protected méthode

Sends data over a socket, using one of TCP, UDP etc. protocols
protected writeSocket ( string $message ) : boolean
$message string A prepared message for sending
Résultat boolean Indicates whether operation was successful
    protected function writeSocket($message)
    {
        $ret = false;
        $length = strlen($message);
        $written = 0;
        $attempts = self::MAX_RETRY_ATTEMPTS;
        $socket = stream_socket_client($this->scheme . "://" . $this->host . ":" . $this->port, $errno, $errmsg, $this->timeout, \STREAM_CLIENT_CONNECT | \STREAM_CLIENT_ASYNC_CONNECT);
        if ($socket !== false) {
            stream_set_timeout($socket, $this->timeout);
            stream_set_blocking($socket, false);
            stream_set_write_buffer($socket, 0);
            do {
                $bytes = fwrite($socket, $message);
                if (empty($bytes)) {
                    if (--$attempts === 0) {
                        trigger_error("Attempts writing to a backend exceeded", E_USER_WARNING);
                        break;
                    }
                    if ($bytes === false) {
                        trigger_error("Couldn't write. Probably the PIPE is broken or socket closed", E_USER_WARNING);
                        break;
                    } elseif ($bytes === "") {
                        trigger_error("Connection aborted", E_USER_WARNING);
                        break;
                    }
                    $errors = error_get_last();
                    if ($errors) {
                        if (isset($errors['message']) && strpos($errors['message'], 'errno=32 ') !== false) {
                            fclose($socket);
                            $socket = stream_socket_client($this->scheme . "://" . $this->host . ":" . $this->port, $errno, $errmsg, $this->timeout, \STREAM_CLIENT_CONNECT | \STREAM_CLIENT_ASYNC_CONNECT);
                        } else {
                            if (isset($errors['message']) && strpos($errors['message'], 'errno=11 ') !== false) {
                                // ignore EAGAIN message
                            } else {
                                trigger_error("An unhandled error detected " . $errors['message'], E_USER_WARNING);
                            }
                        }
                    }
                    $this->sleepWait();
                } else {
                    $written += $bytes;
                    if ($written < $length) {
                        $message = substr($message, 0, $bytes);
                    } else {
                        $ret = true;
                    }
                }
            } while ($written < $length);
            fclose($socket);
        }
        return $ret;
    }