現在の位置: ホーム> 最新記事一覧> socket_last_error() + socket_clear_error()を使用してエラーコードフィルタリングを実装する方法

socket_last_error() + socket_clear_error()を使用してエラーコードフィルタリングを実装する方法

M66 2025-05-27

エラー管理は、PHPでプログラミングする際にネットワーク通信プログラムのデバッグと維持の重要な部分です。 socket_last_error()およびsocket_clear_error()は、エラー処理のためにPHPによって提供される2つの関数です。開発者は、最新のソケットエラー情報を取得してクリアするのに役立ちます。この記事では、これら2つの機能を使用する方法を詳細に説明し、例を使用してエラーコードをフィルタリングし、エラー情報をクリアする方法を示します。

1。Socket_Last_Error()関数

socket_last_error()は、最後のソケット操作のエラーコードを返すために使用されます。そのプロトタイプは次のとおりです。

 int socket_last_error ([ resource $socket ] )
  • パラメーター$ソケットはオプションです。特定のソケットリソースが渡されると、ソケットのエラーコードが返されます。渡されない場合、デフォルトで発生したエラーコードが返されます。

  • 返品値は、エラーコードを示す整数です。

2。Socket_Clear_Error()関数

socket_clear_error()は、最新のソケットエラーレコードをクリアするために使用されます。プロトタイプは次のとおりです。

 void socket_clear_error ([ resource $socket ] )
  • パラメーター$ソケットもオプションです。渡されない場合は、グローバルソケットエラーをクリアします。特定のソケットリソースが渡された場合は、リソースのエラーレコードをクリアします。

3.実用的なアプリケーションの例

以下は、これらの2つの関数を使用してエラーをキャプチャ、フィルタリング、クリアする方法を示す簡単なTCPクライアント接続の例です。

 <?php
// aを作成します TCP socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

// 存在しない住所に違法に接続します,エラーのトリガー
$host = 'm66.net';
$port = 9999; // このポートにはサービスリスニングがないと仮定します
@socket_connect($socket, $host, $port);

// エラーコードを取得します
$errorCode = socket_last_error($socket);

if ($errorCode !== 0) {
    // エラーメッセージを取得します
    $errorMessage = socket_strerror($errorCode);
    echo "接続に失敗しました,エラーコード: $errorCode,エラーメッセージ: $errorMessage\n";

    // 根据エラーコード进行逻辑判断
    if ($errorCode === 111 || $errorCode === 10061) {
        echo "ターゲットホストは接続を拒否します,診る m66.net:$port サービスを有効にするかどうか。\n";
    } elseif ($errorCode === 110 || $errorCode === 10060) {
        echo "接続タイムアウト,確認してください m66.net アクセス可能ですか。\n";
    }

    // エラーステータスをクリアします
    socket_clear_error($socket);
}

// プログラムロジックを続行します...
socket_close($socket);
?>

上記のコードで:

  1. @Socket_Connectを使用して、デフォルトの警告メッセージを抑制します。

  2. socket_last_error()を介して特定のエラーコードを取得します。

  3. socket_strerror()を使用して、エラーコードを人間の読み取り可能な文字列に変換します。

  4. エラーコードを使用して、接続が拒否されるか、タイムアウトされているか、その他の問題が拒否されるかを判断します。

  5. 最後に、 socket_clear_error()を使用してエラーをクリアして、その後の誤判断を避けます。

4.一般的なエラーコード参照