Start · Sprachen · PHP · Referenz · socket_strerror

socket_strerror

Funktion

Gibt eine menschenlesbare Fehlerbeschreibung für einen numerischen Socket-Fehlercode zurück.

seit PHP 4.1.0 Kategorie: http

Signatur

socket_strerror(int $error_code): string

Beschreibung

socket_strerror() übersetzt einen numerischen Socket-Fehlercode in eine verständliche Fehlermeldung als Zeichenkette. Die Funktion funktioniert analog zur C-Funktion strerror() und ist nützlich, um Fehler aus Socket-Operationen für Logging oder Benutzeranzeige aufzubereiten.

Den passenden Fehlercode erhält man typischerweise über socket_last_error(), nachdem eine Socket-Operation fehlgeschlagen ist. Die zurückgegebenen Fehlermeldungen stammen direkt aus dem Betriebssystem und können je nach Plattform (Linux, Windows) leicht unterschiedlich formuliert sein.

Die Funktion ist besonders nützlich in Verbindung mit socket_last_error() und socket_clear_error(), um eine robuste Fehlerbehandlung in netzwerkbasierenden PHP-Anwendungen zu implementieren. Es empfiehlt sich, nach jeder fehlerhaften Socket-Operation den Fehlercode abzufragen und den Fehler-Status anschließend zurückzusetzen.

Parameter

Name Typ Default Beschreibung
$error_code Pflicht int Ein numerischer Socket-Fehlercode, wie er z. B. von socket_last_error() zurückgegeben wird.

Rückgabewert

Typ
string
Beschreibung
Gibt eine menschenlesbare Beschreibung des angegebenen Fehlercodes zurück. Die Fehlermeldung ist betriebssystemspezifisch und wird immer als Zeichenkette geliefert.

Beispiele

Einfache Fehlerbehandlung beim Erstellen eines Sockets

<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

if ($socket === false) {
    $errorCode = socket_last_error();
    $errorMessage = socket_strerror($errorCode);
    echo "Socket konnte nicht erstellt werden. Fehlercode: $errorCode\n";
    echo "Fehlermeldung: $errorMessage\n";
} else {
    echo "Socket erfolgreich erstellt.\n";
    socket_close($socket);
}
Socket erfolgreich erstellt.

Fehlerbehandlung bei fehlgeschlagenem Verbindungsaufbau

<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

if ($socket === false) {
    die('Socket-Erstellung fehlgeschlagen: ' . socket_strerror(socket_last_error()));
}

// Verbindung zu einem nicht erreichbaren Host versuchen
$result = socket_connect($socket, '192.0.2.1', 9999);

if ($result === false) {
    $errorCode = socket_last_error($socket);
    echo "Verbindung fehlgeschlagen (Code $errorCode): " . socket_strerror($errorCode) . "\n";
    socket_clear_error($socket);
}

socket_close($socket);
Verbindung fehlgeschlagen (Code 111): Connection refused

Direktes Übersetzen bekannter Fehlercodes

<?php
// Bekannte POSIX-Fehlercodes direkt übersetzen
$knownCodes = [1, 13, 98, 111, 113];

foreach ($knownCodes as $code) {
    echo "Fehlercode $code: " . socket_strerror($code) . "\n";
}
Fehlercode 1: Operation not permitted Fehlercode 13: Permission denied Fehlercode 98: Address already in use Fehlercode 111: Connection refused Fehlercode 113: No route to host

// Wichtig · Fallstricke

Plattformabhängigkeit: Die zurückgegebenen Fehlermeldungen sind betriebssystemabhängig. Unter Windows können die Meldungen und Fehlercodes von denen unter Linux/Unix abweichen, da Windows eine eigene Winsock-Fehlernummern-Systematik verwendet.

Kombination mit socket_clear_error(): Nach der Fehlerbehandlung sollte socket_clear_error() aufgerufen werden, um den gespeicherten Fehlercode zurückzusetzen, da socket_last_error() sonst beim nächsten Aufruf noch den alten Fehler liefert – selbst wenn die darauffolgende Operation erfolgreich war.

Sicherheitshinweis: Fehlermeldungen von socket_strerror() sollten niemals ungefiltert in HTML-Ausgaben eingebettet werden, da sie Zeichen enthalten können, die zu Cross-Site-Scripting (XSS) führen. Vor der Ausgabe im Browser immer htmlspecialchars() verwenden.