Start · Sprachen · PHP · Referenz · socket_last_error

socket_last_error

Funktion

Gibt den letzten Fehlercode zurück, der an einem Socket (oder global) aufgetreten ist.

seit PHP 4.1.0 Kategorie: http

Signatur

socket_last_error(?Socket $socket = null): int

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

Typ
int
Beschreibung
Gibt den letzten Fehlercode als Ganzzahl zurück. 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);
Verbindung fehlgeschlagen (Code 111): Connection refused

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();
}
Fehlercode: 97 Fehlermeldung: Address family not supported by protocol

// 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.