Signatur
Beschreibung
socket_last_error() liefert den zuletzt aufgetretenen Fehlercode für eine Socket-Ressource bzw. – wenn kein Socket übergeben wird – den globalen Socket-Fehlercode. Der zurückgegebene Integer-Wert kann anschließend mit socket_strerror() in eine lesbare Fehlermeldung umgewandelt werden.
Die Funktion ist besonders nützlich, wenn Socket-Operationen wie socket_connect(), socket_bind() oder socket_recv() fehlschlagen und man den genauen Fehlergrund ermitteln möchte. Die Fehlercodes entsprechen den systemseitigen Errno-Werten (z. B. ECONNREFUSED = 111).
Nach dem Auslesen des Fehlers empfiehlt es sich, den Fehlerzähler mit socket_clear_error() zurückzusetzen, damit nachfolgende Fehlerprüfungen nicht durch alte Codes verfälscht werden. Ab PHP 8.0 wird statt einer Ressource eine Socket-Objekt-Instanz verwendet.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $socket | Socket|null | null | Eine gültige Socket-Instanz (erstellt z. B. von socket_create()). Wird null übergeben oder der Parameter weggelassen, wird der globale Socket-Fehlercode zurückgegeben. |
Rückgabewert
0 bedeutet, dass kein Fehler vorliegt. Der Code kann mit socket_strerror() in eine menschenlesbare Meldung umgewandelt werden.Beispiele
Verbindungsfehler erkennen und ausgeben
<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo 'Socket konnte nicht erstellt werden: ' . socket_strerror(socket_last_error()) . PHP_EOL;
exit(1);
}
$result = socket_connect($socket, '127.0.0.1', 9999);
if ($result === false) {
$errorCode = socket_last_error($socket);
$errorMsg = socket_strerror($errorCode);
echo "Verbindung fehlgeschlagen (Code {$errorCode}): {$errorMsg}" . PHP_EOL;
socket_clear_error($socket);
}
socket_close($socket);
Globalen Fehlercode nach socket_create-Fehler abfragen
<?php
// Ungültige Domain, um einen Fehler zu provozieren
$socket = socket_create(999, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
$code = socket_last_error(); // kein Socket-Objekt vorhanden, globaler Code
echo 'Fehlercode: ' . $code . PHP_EOL;
echo 'Fehlermeldung: ' . socket_strerror($code) . PHP_EOL;
socket_clear_error();
}
// Wichtig · Fallstricke
Fehler zurücksetzen: Nach dem Auslesen des Fehlercodes sollte socket_clear_error() aufgerufen werden, um den Fehlerzustand zu bereinigen. Andernfalls können nachfolgende Prüfungen fälschlicherweise einen Fehler melden, obwohl die letzte Operation erfolgreich war.
PHP 8.0+: Ab PHP 8.0 erwartet die Funktion eine Socket-Objekt-Instanz statt einer Ressource. Code, der auf älteren PHP-Versionen läuft und resource-Typen verwendet, muss ggf. angepasst werden.