socket_last_error () ist ein sehr wichtiges Debugging -Tool, wenn es sich um die Programmiernetzwerke mit PHP handelt. Es kann uns helfen, den Fehlercode zu erhalten, der in der neuesten Socket -Operation aufgetreten ist, und dann das Problem zu finden. Viele Entwickler haben jedoch berichtet, dass: Socket_Last_error () immer 0 zurückgibt, obwohl eine Ausnahme eindeutig vorhanden ist, was das Debuggen äußerst schwierig macht. In diesem Artikel wird die Grundursachen dieses Phänomens in der Tiefe und der wichtigsten Punkte analysiert, die Sie möglicherweise übersehen.
Die Funktion der Funktion von Socket_Last_Error () besteht darin, den letzten Fehlercode zurückzugeben, der in der angegebenen Socket -Ressource auftritt. Wenn die Socket -Ressource nicht übergeben wird, wird der Fehlercode für den aktuellen Standard -Socket zurückgegeben. Es ist zu beachten, dass die Funktion den Fehlercode nur im letzten Operation zurückgibt und ihr Wert zurückgesetzt wird, sobald der Anruf erfolgreich ist oder der Fehler gelöscht wird.
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "Fehlgeschlagen, Socket zu erstellen,Fehlercode:" . socket_last_error() . "\n";
}
In der Regel gibt es mehrere häufige Gründe, dass Socket_Last_Error () immer wieder zurückgibt. 0:
socket_last_error () Wenn kein Socket angegeben ist, gibt es den Fehlerstatus des Standardbuchse zurück. Wenn Sie mehrere Sockets verwenden oder nicht explizit angegeben sind, wird 0 zurückgegeben.
// Fehlerdemonstration,KEINE SECKET angegeben
$errorCode = socket_last_error(); // Wahrscheinlich immer0
// Richtige Demonstration
$errorCode = socket_last_error($socket);
Wenn eine Socket -Operation erfolgreich ausgeführt wird, wird der Fehlercode auf 0 zurückgesetzt. Wenn Sie zusätzlich Socket_Clear_error () aufrufen, wird auch der vorherige Fehlerstatus gelöscht.
// Fehler vor dem Betrieb erkennen
$errorCode = socket_last_error($socket);
// Wenn es erfolgreich aufgerufen wurde socket_connect oder socket_write,Der Fehler kann gelöscht worden sein
socket_clear_error($socket);
// Zu diesem Zeitpunkt socket_last_error() Wird zurückkehren 0
Manchmal ist der Vorgang abnormal, ist aber tatsächlich ein Fehler in der Geschäftslogik oder an anderen Stellen, und der Sockel selbst erzeugt keinen Fehler. Daher ist es normal, dass Socket_Last_Error () 0 zurückgibt.
In Kombination mit den oben genannten Vorsichtsmaßnahmen wird empfohlen, den folgenden Modus zu verwenden, um Fehler zu debuggen:
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "Fehlgeschlagen, Socket zu erstellen,Fehlercode:" . socket_last_error() . "\n";
exit;
}
$result = socket_connect($socket, "gitbox.net", 80);
if ($result === false) {
$err = socket_last_error($socket);
echo "Verbindung ist fehlgeschlagen,Fehlercode:$err - " . socket_strerror($err) . "\n";
} else {
echo "Verbindung erfolgreich!\n";
}
Es ist besonders wichtig zu beachten, dass Socket_Last_error () in die Socket -Ressource übergeben werden muss, um genaue Fehlerinformationen zu erhalten.
Fehlermeldung Reinigung : Wenn Sie Socket_Clear_error ($ Socket) aufrufen, rufen Sie Socket_Last_error ($ Socket) auf 0 zurück.
Asynchrone oder nicht blockierende Operationen : Bei asynchronen oder nicht blockierenden Socket-Operationen werden einige Fehler möglicherweise nicht sofort mit socket_last_error () reflektiert und müssen in Kombination mit anderen Zuständen überprüft werden.
Fehlercodeübersetzung : Verwenden Sie Socket_Strerror (), um Fehlercodes in leicht verständliche Fehlerbeschreibungen umzuwandeln.
Das Verständnis und die korrekte Verwendung von Socket_Last_error () kann die Debugging -Effizienz von Netzwerk erheblich verbessern und Fehleinschätzungen vermeiden, da der Fehlercode immer 0 ist. Hoffentlich kann dieser Artikel Ihnen helfen, herauszufinden, warum Sie immer 0 zurückgeben und Ihr Netzwerkprogramm robuster werden.