Signatur
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
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;
}
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.