လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> တရားဝင် PHP စာရွက်စာတမ်းတွင်ပျောက်ဆုံးနေသော socket_clear_error () မြင်ကွင်းဖြည့်စွက်

တရားဝင် PHP စာရွက်စာတမ်းတွင်ပျောက်ဆုံးနေသော socket_clear_error () မြင်ကွင်းဖြည့်စွက်

M66 2025-06-02

PHP တွင်ကွန်ယက် socket များ operating လုပ်သည့်အခါအမှားကိုင်တွယ်ခြင်းသည်အမြဲတမ်းခေါင်းကိုက်ခြင်းဖြစ်နိုင်သည်။ PHP သည် function_clear_Error () ကိုထောက်ပံ့ပေးသည်။

ဤဆောင်းပါးသည်သင့်အား socket_clear_Ercror () တွင်သက်ဆိုင်သောအခြေအနေများနှင့်စပ်လျဉ်း။ ရွေးချယ်ရန်အထောက်အကူပြုရန်အမှန်တကယ်ကိစ္စများကိုပေါင်းစပ်ပြီး Socket Erlues အမှားများကို ပို. ကြော့ရှင်းစွာကိုင်တွယ်ရန်မည်သို့အသုံးပြုရမည်ကိုဥပမာပေးပါလိမ့်မည်။


Socket_Clear_Error ဆိုတာဘာလဲ ()

Socket_Close_Error () သည် Socket connection error error error status ကိုသန့်ရှင်းရေးလုပ်ရန်အထူးအသုံးပြုသော PHP ၏ Socket extension တွင် function တစ်ခုဖြစ်သည်။ ရိုးရိုးလေးပြောရရင် socket connection ရဲ့အမှားအလံကို "reset" နိုင်ပါတယ်။

တရားဝင်စာရွက်စာတမ်းတွင် Socket_Close_Error () သည် function signature နှင့်ဝါကျဖော်ပြချက်ကိုသာရေးသားခဲ့သည်။

 bool socket_clear_error ( resource $socket )

Socket Error အမှားအယွင်းကိုရှင်းလင်းပါ။

သို့သော်၎င်းကိုမည်သည့်အချိန်တွင်ခေါ်ရန်လိုအပ်သည့်အချိန်တွင်၎င်းကိုမဖော်ပြထားပါ။


အဘယ်ကြောင့် socket အမှားများကိုအဘယ်ကြောင့်သန့်ရှင်းရေး?

ကွန်ယက်ထုတ်လွှင့်ခြင်းလုပ်ငန်းစဉ်အတွင်းအမှားအယွင်းများစွာဖြစ်ပေါ်လာနိုင်သည်။ PHP ရှိ Socket function သည်များသောအားဖြင့် မှားယွင်းသော နောက်သို့ပြန်ပြီးအမှားကုဒ်တစ်ခုသတ်မှတ်သည်။ ကျွန်ုပ်တို့သည်အမှားကုဒ်များကိုရယူရန် socket_last_Error () ကို သုံး. ၎င်းကိုဖတ်နိုင်သောသတင်းအချက်အလက်များသို့ပြောင်းရန် socket_strorror () ကို သုံးပါ။

သို့သော်ဤအမှားအယွင်းများသည်ကိုယ်တိုင်သန့်ရှင်းရေးလုပ်ခြင်းသည် ဆက်လက်. ဆက်လက်တည်ရှိလိမ့်မည်။

ရိုးရှင်းသောဥပမာတစ်ခုပေးရန်

 $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, 'm66.net', 80);
socket_write($socket, "GET / HTTP/1.1\r\nHost: m66.net\r\n\r\n");

$errorCode = socket_last_error($socket);
if ($errorCode !== 0) {
    echo "အမှားတစ်ခုဖြစ်ပွားခဲ့သည်:" . socket_strerror($errorCode) . PHP_EOL;
    socket_clear_error($socket); // အမှားအယွင်းကိုရှင်းလင်းပါ,နောက်ဆက်တွဲစစ်ဆင်ရေးကိုထိခိုက်ခြင်းမှရှောင်ကြဉ်ပါ
}

// ဆက်လက်အသုံးပြုရန် $socket အခြားအရာတစ်ခုခုလုပ်ပါ

Socket_Close_Error () ကို Socket_last_Error () ဟုမခေါ်ပါ။


ပုံမှန်အသုံးပြုမှုအခြေအနေများ

1 ။ စာဖတ်ခြင်းမရှိသော socket ကိုဖတ်ခြင်းနှင့်ရေးသားခြင်းသည်

ပိတ်ဆို့ခြင်းမဟုတ်သော mode တွင် socket operty သည်ပြီးစီးရန် စောင့်နိုင်ပါ ဒီအမှားဟာတကယ့်ကိုမအောင်မြင်ပါ,

အကယ်. အမှားအယွင်းကိုမသန့်ရှင်းပါကဆက်သွယ်မှုနှင့်ပတ်သက်သောပြ a နာရှိနေသည်ဟုမှားယွင်းစွာတွေးမိလိမ့်မည်။

 socket_set_nonblock($socket);

while (true) {
    $data = socket_read($socket, 2048);
    if ($data === false) {
        $err = socket_last_error($socket);
        if ($err === SOCKET_EAGAIN || $err === SOCKET_EWOULDBLOCK) {
            socket_clear_error($socket);
            // ယခုအချိန်တွင်ဒေတာမရှိပါ,နောက်မှထပ်ကြိုးစားပါ
            usleep(100000);
            continue;
        } else {
            // အခြားအမှားများ,ဖြစ်စဉ်ကိုသို့မဟုတ်ထွက်ပေါက်
            break;
        }
    }
    echo $data;
}

2 ။ ချိတ်ဆက်မှုမြှောက်မခွဲမှုသို့မဟုတ်ရှည်လျားသောဆက်သွယ်မှုအမှားသန့်ရှင်းရေး

အချိန်ကြာမြင့်စွာကျင်းပသော socket connection တစ်ခုသည်ယာယီအမှားများကိုအကြိမ်များစွာကြုံတွေ့ရနိုင်သည်။ ယခင်အမှားအယွင်းများကြောင့်နောက်ဆက်တွဲစစ်ဆင်ရေးများမအောင်မြင်နိုင်စေရန်သေချာစေရန်အတွက်၎င်းသည်စစ်ဆင်ရေးပြီးဆုံးပြီးနောက် Socket_clear_Error () ကို ခေါ်ရန်အလေ့အကျင့်ကောင်းတစ်ခုဖြစ်သည်။


အကျဉ်းချုပ်

  • Socket_Close_Error () သည် socket ၏လက်ရှိအမှားအယွင်းကိုသန့်ရှင်းရေးလုပ်ရန် function တစ်ခုဖြစ်သည်။

  • ၎င်းသည်ယာယီမရရှိနိုင်သည့် (Eagain / Ewouldblock) ကြောင့်မှားယွင်းသော misjudgment ကိုရှောင်ရှားရန်တားမြစ်ထားသော socket programming တွင်မကြာခဏအသုံးပြုလေ့ရှိသည်။

  • ချိတ်ဆက်မှုခြုံငုံခြင်းသို့မဟုတ်ရှည်လျားသောဆက်သွယ်မှုအခြေအနေများတွင်အမှားအယွင်းများပြန်လည်စတင်ရန်နှင့်နောက်ဆက်တွဲစစ်ဆင်ရေးများပုံမှန်အတိုင်းပြုလုပ်ရန်လည်းအသုံးပြုနိုင်သည်။

  • အကယ်. ၎င်းကိုမခေါ်ပါကအမှားအယွင်းများကိုစီးပွားရေးယုတ္တိဗေဒကိုအကျိုးသက်ရောက်စေသည့် အမှားအယွင်း ကိုထိန်းသိမ်းထားသည်။


ကိုးကားစာနမူနာကုဒ်

 <?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!$socket) {
    die("ဖန်တီး. မရပါ socket: " . socket_strerror(socket_last_error()) . PHP_EOL);
}

if (!socket_connect($socket, 'm66.net', 80)) {
    die("ဆက်သွယ်မှုမအောင်မြင်ပါ: " . socket_strerror(socket_last_error($socket)) . PHP_EOL);
}

socket_set_nonblock($socket);

$request = "GET / HTTP/1.1\r\nHost: m66.net\r\nConnection: close\r\n\r\n";
socket_write($socket, $request);

while (true) {
    $data = socket_read($socket, 2048);
    if ($data === false) {
        $err = socket_last_error($socket);
        if ($err === SOCKET_EAGAIN || $err === SOCKET_EWOULDBLOCK) {
            socket_clear_error($socket);
            usleep(100000); // စောင့် 0.1 စက္ကန့်ပိုင်း၌ထပ်မံဖတ်ပါ
            continue;
        } else {
            echo "အမှားကိုဖတ်ပါ:" . socket_strerror($err) . PHP_EOL;
            break;
        }
    } elseif ($data === '') {
        // ဆက်သွယ်မှုပိတ်
        break;
    }
    echo $data;
}

socket_close($socket);

ဤကုဒ်သည် Socket_Close_ERRORERORERRORE () ကို ပိတ်ဆို့ခြင်းသည်ပိတ်ဆို့ခြင်းမရှိသော mode ကိုလျစ်လျူရှုပြီး HTTP တုံ့ပြန်မှုကိုအောင်မြင်စွာဖတ်ရှုနိုင်ရန်မည်သို့အသုံးပြုရမည်ကိုပြသသည်။


ဤနည်းအားဖြင့် Socket_Close_Error () ၏အခန်းကဏ် and နှင့်အသုံးပြုမှုသည်ရှင်းလင်းလိမ့်မည်။ သင်၏ Socket Program ကိုပိုမိုခိုင်မာစေနိုင်သည့်ပိတ်ဆို့ခြင်းမဟုတ်သော, ရှည်လျားသောဆက်သွယ်မှုနှင့်အခြားအခြေအနေများတွင်အမှားအယွင်းများကိုအချိန်မီမသန့်ရှင်းစေရန်သတိရပါ။