Signatur
Beschreibung
socket_clear_error() setzt den Fehlercode eines übergebenen Socket-Objekts auf null zurück. Wird kein Socket übergeben (oder null), wird stattdessen der globale, prozessweite Socket-Fehlercode gelöscht, der von socket_last_error() ohne Argument zurückgegeben wird.
Die Funktion ist vor allem dann nützlich, wenn man nach einem abgefangenen Fehler sicherstellen möchte, dass folgende Aufrufe von socket_last_error() nicht noch den alten Fehlercode liefern. Ohne dieses Zurücksetzen bleibt der Fehlerwert solange erhalten, bis ein neuer Fehler auftritt oder die Verbindung getrennt wird.
Typischer Einsatz: Nach dem Behandeln eines EAGAIN- oder EWOULDBLOCK-Fehlers (Socket ist nicht-blockierend, Daten noch nicht verfügbar) den Fehlerpuffer bereinigen, bevor erneut gelesene oder geschrieben wird.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $socket | ?Socket | null | Das Socket-Objekt, dessen Fehlerpuffer geleert werden soll. Wird null übergeben oder der Parameter weggelassen, wird der globale Socket-Fehlerpuffer des Prozesses geleert. |
Rückgabewert
Beispiele
Fehlerpuffer nach EAGAIN im nicht-blockierenden Modus zurücksetzen
<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_nonblock($socket);
// Verbindungsversuch – bei nicht-blockierendem Socket sofort
@socket_connect($socket, '127.0.0.1', 8080);
$error = socket_last_error($socket);
if ($error === SOCKET_EINPROGRESS || $error === SOCKET_EWOULDBLOCK) {
echo 'Verbindung wird hergestellt (nicht-blockierend)...' . PHP_EOL;
// Fehler wurde behandelt, Puffer leeren
socket_clear_error($socket);
}
// Weiterer Betrieb — socket_last_error() liefert jetzt 0
echo 'Aktueller Fehlercode: ' . socket_last_error($socket) . PHP_EOL;
socket_close($socket);
Globalen Socket-Fehlerpuffer leeren (ohne Socket-Objekt)
<?php
// Simulierter globaler Fehler durch eine fehlgeschlagene Operation
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
// Absichtlich ungültige Verbindung
@socket_connect($socket, '0.0.0.0', 0);
echo 'Fehler vor dem Löschen: ' . socket_last_error() . PHP_EOL;
// Globalen Fehlerpuffer leeren
socket_clear_error();
echo 'Fehler nach dem Löschen: ' . socket_last_error() . PHP_EOL;
socket_close($socket);
// Wichtig · Fallstricke
Hinweis zu PHP 8.0: Ab PHP 8.0 wird das ressource-basierte Socket-Handle durch das Socket-Objekt ersetzt. In älteren PHP-Versionen (5.x / 7.x) wird statt eines Socket-Objekts eine Ressource übergeben.
Fallstrick: Das Löschen des globalen Fehlerpuffers beeinflusst alle Teile des Programms, die socket_last_error() ohne Argument aufrufen. In Multi-Socket-Szenarien sollte daher immer das konkrete Socket-Objekt übergeben werden, um unerwünschte Seiteneffekte zu vermeiden.