Position actuelle: Accueil> Derniers articles> Comment utiliser socket_last_error () + socket_clear_error () pour implémenter le filtrage du code d'erreur

Comment utiliser socket_last_error () + socket_clear_error () pour implémenter le filtrage du code d'erreur

M66 2025-05-27

La gestion des erreurs est un élément important du débogage et de la maintenance des programmes de communication réseau lors de la programmation avec PHP. socket_last_error () et socket_clear_error () sont deux fonctions fournies par PHP pour la gestion des erreurs. Ils peuvent aider les développeurs à obtenir et à effacer les informations d'erreur de socket les plus récentes. Cet article expliquera en détail comment utiliser ces deux fonctions et utiliser un exemple pour montrer comment filtrer les codes d'erreur et effacer les informations d'erreur.

1. Socket_last_error ()

socket_last_error () est utilisé pour renvoyer le code d'erreur de l'opération de dernière prise. Son prototype est le suivant:

 int socket_last_error ([ resource $socket ] )
  • La prise de paramètre $ est facultative. Si une ressource de socket spécifique est transmise, le code d'erreur de la prise sera renvoyé; S'il n'est pas adopté, le code d'erreur qui s'est produit, la valeur par défaut est renvoyée.

  • La valeur de retour est un entier indiquant le code d'erreur.

2. Socket_Clear_error ()

socket_clear_error () est utilisé pour effacer l'enregistrement d'erreur de socket le plus récent. Le prototype est le suivant:

 void socket_clear_error ([ resource $socket ] )
  • La prise de paramètre $ est également facultative. Si vous n'êtes pas passé, effacez l'erreur du socket global; Si une ressource de socket spécifique est passée, effacez l'enregistrement d'erreur de la ressource.

3. Exemples d'application pratiques

Ce qui suit est un exemple de connexion client TCP simple qui illustre comment utiliser ces deux fonctions pour capturer, filtrer et effacer les erreurs.

 <?php
// Créer un TCP socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

// Connectez-vous illégalement à une adresse qui n&#39;existe pas,Erreur de déclenchement
$host = 'm66.net';
$port = 9999; // Supposons que ce port n&#39;a pas d&#39;écoute de service
@socket_connect($socket, $host, $port);

// Obtenez le code d&#39;erreur
$errorCode = socket_last_error($socket);

if ($errorCode !== 0) {
    // Obtenir un message d&#39;erreur
    $errorMessage = socket_strerror($errorCode);
    echo "Échec de la connexion,Code d&#39;erreur: $errorCode,message d&#39;erreur: $errorMessage\n";

    // 根据Code d&#39;erreur进行逻辑判断
    if ($errorCode === 111 || $errorCode === 10061) {
        echo "L&#39;hôte cible refuse de se connecter,examiner m66.net:$port Si vous devez activer le service。\n";
    } elseif ($errorCode === 110 || $errorCode === 10060) {
        echo "Délai de connexion,Veuillez confirmer m66.net Est-il accessible。\n";
    }

    // Effacer l&#39;état d&#39;erreur
    socket_clear_error($socket);
}

// Continuer la logique du programme...
socket_close($socket);
?>

Dans le code ci-dessus:

  1. Utilisez @socket_connect pour supprimer le message d'avertissement par défaut;

  2. Obtenez le code d'erreur spécifique via socket_last_error () ;

  3. Utilisez socket_strorror () pour convertir les codes d'erreur en chaînes lisibles par l'homme;

  4. Utilisez le code d'erreur pour déterminer si la connexion est rejetée, chronométrée ou d'autres problèmes;

  5. Enfin, utilisez socket_clear_error () pour effacer l'erreur pour éviter les erreurs de jugement ultérieures.

4. Référence du code d'erreur commune

Code d'erreur signification
111 Connexion refusée (Linux)
110 Connexion Sinmed (Linux)
10061 Connexion refusée (Windows)
10060 Connexion Spourd Out (Windows)