Start · Sprachen · PHP · Referenz · swoole_errno

swoole_errno

Funktion

Gibt den Fehlercode des letzten fehlgeschlagenen Systemaufrufs zurück (äquivalent zu <code>errno</code> in C).

Kategorie: misc

Signatur

swoole_errno(): int

Beschreibung

swoole_errno() liefert den Fehlercode (errno), der vom Betriebssystem nach dem letzten fehlgeschlagenen Systemaufruf gesetzt wurde. Diese Funktion ist das PHP-Pendant zur C-Variable errno und wird in der Swoole-Erweiterung bereitgestellt, um asynchrone und coroutine-basierte Operationen präzise debuggen zu können.

Im Gegensatz zu socket_last_error(), das nur Socket-spezifische Fehler zurückgibt, spiegelt swoole_errno() den systemweiten errno-Wert wider, der nach Systemaufrufen wie read, write, connect oder accept gesetzt wird. Dies ist besonders nützlich, wenn man in Swoole-Servern oder -Clients auf Netzwerk-, Datei- oder Prozessfehler reagieren möchte.

Typische Fehlercodes sind beispielsweise ECONNRESET (104), ETIMEDOUT (110) oder ENOENT (2). Um einen menschenlesbaren Fehlertext zum zurückgegebenen Code zu erhalten, kann swoole_strerror() verwendet werden.

Hinweis: Der Wert von errno ist nur direkt nach einem fehlgeschlagenen Aufruf aussagekräftig und kann durch nachfolgende Systemaufrufe überschrieben werden. Er sollte daher unmittelbar nach dem fehlerhaften Aufruf abgefragt werden.

Rückgabewert

Typ
int
Beschreibung
Gibt den errno-Wert des letzten fehlgeschlagenen Systemaufrufs als ganzzahligen Fehlercode zurück. Bei 0 liegt kein Fehler vor.

Beispiele

Fehlercode nach einem fehlgeschlagenen Swoole-Client-Connect ausgeben

<?php
$client = new Swoole\Client(SWOOLE_SOCK_TCP);

if (!$client->connect('127.0.0.1', 9999, 1)) {
    $errCode = swoole_errno();
    $errMsg  = swoole_strerror($errCode);
    echo "Verbindung fehlgeschlagen." . PHP_EOL;
    echo "Fehlercode : " . $errCode . PHP_EOL;
    echo "Fehlermeldung: " . $errMsg . PHP_EOL;
}
Verbindung fehlgeschlagen. Fehlercode : 111 Fehlermeldung: Connection refused

Fehlercode in einem Swoole-Server bei einem Fehler-Ereignis prüfen

<?php
$server = new Swoole\Server('0.0.0.0', 9501);

$server->on('connect', function ($server, $fd) {
    echo "Client #{$fd} verbunden." . PHP_EOL;
});

$server->on('receive', function ($server, $fd, $reactorId, $data) {
    // Simulierte Fehlerbehandlung
    $result = $server->send($fd, $data);
    if ($result === false) {
        $errCode = swoole_errno();
        echo "Fehler beim Senden an #{$fd}: " . swoole_strerror($errCode)
            . " (Code: {$errCode})" . PHP_EOL;
    }
});

$server->on('close', function ($server, $fd) {
    echo "Client #{$fd} getrennt." . PHP_EOL;
});

$server->start();

// Wichtig · Fallstricke

Reihenfolge beachten: Da errno nach jedem Systemaufruf überschrieben werden kann, sollte swoole_errno() unmittelbar nach dem fehlerhaften Aufruf aufgerufen werden – andernfalls könnten zwischenzeitlich erfolgreiche Aufrufe den Fehlerwert zurücksetzen.

Betriebssystemabhängigkeit: Die genauen Fehlercodes und ihre Bedeutung können je nach Betriebssystem variieren. Die Konstanten aus <errno.h> sind unter Linux am gebräuchlichsten und gelten für die meisten Swoole-Deployments.

Swoole-Voraussetzung: Diese Funktion ist nur verfügbar, wenn die Swoole-Erweiterung installiert und aktiviert ist. Sie ist kein Bestandteil des PHP-Kerns.