PHP Socket Programming တွင် Debugging အမှားများသည်မလွှဲမရှောင်သာဖြစ်စဉ်တစ်ခုဖြစ်သည်။ အမှား positioning နှင့် processing ကိုပိုမိုထိရောက်စွာလုပ်ဆောင်နိုင်ရန်အတွက် Socket_Close_Error () function သည်အထူးအရေးကြီးသည်။ ဤဆောင်းပါးသည်အမှန်တကယ် debugging လုပ်ငန်းစဉ်အတွင်းအသုံးပြုမှု၏အချိန်နှင့်၎င်း၏လျှောက်လွှာဥပမာအသေးစိတ်အချက်အလက်များကိုအသေးစိတ်မိတ်ဆက်ပေးလိမ့်မည်။
Socket_Close_Error () သည်နောက်ဆုံး socket error error message ကိုရှင်းလင်းရန်အသုံးပြုသော function တစ်ခုဖြစ်သည်။ ၎င်းသည်သီးခြား socket အရင်းအမြစ်တစ်ခုပေါ်တွင်လုပ်ဆောင်နိုင်ပြီး၎င်းတို့ကိုဖြတ်သန်းစရာမလိုဘဲ parameters များကိုဖြတ်သန်းသွားနိုင်သည်။
function ရှေ့ပြေးပုံစံသည်အောက်ပါအတိုင်းဖြစ်သည် -
socket_clear_error(?Socket $socket = null): void
အဆိုပါ parameter သည် $ socket ကို optional ကိုဖြစ်ပါတယ်။ ထောက်ပံ့ပေးလျှင်, socket ၏အမှားမက်ဆေ့ခ်ျကိုရှင်းလင်း; ချန်လှပ်ပါကကမ္ဘာလုံးဆိုင်ရာအမှားအယွင်းကိုရှင်းလင်းသည်။
PHP Socket API ( socket_connect) , socket_connect_write () , socket_read () စသဖြင့်), အမှားတစ်ခုဖြစ်ပါကဤအမှားများကိုအတွင်းပိုင်းတွင်ဤအမှားများကိုကယ်တင်လိမ့်မည်။ အမှားကုဒ်ကို Socket_last_Error မှတဆင့်ရနိုင်သည်။ သို့သော်ဤအမှားအယွင်းသည် တဖြည်းဖြည်းတိုးပွားလာ သည်။ အကယ်. သင်သည်တက်ကြွစွာမအောင်မြင်ပါက၎င်းသည်သင်၏နောက်ဆက်တွဲတရားစီရင်မှုဆိုင်ရာယုတ္တိဗေဒကိုအကျိုးသက်ရောက်နိုင်သည်။
ဥပမာအားဖြင့်, သင်ဆက်သွယ်မှုကြိုးပမ်းမှုမအောင်မြင်ဘဲအောင်မြင်စွာဆက်သွယ်ပါ။ socket_cloear_Error () ကိုမခေါ်ပါကသင်ရရှိသောအမှားအယွင်းသည်ယခင်ကမအောင်မြင်သောအချက်အလက်များဖြစ်သည်။
$host = 'm66.net';
$port = 80;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$attempts = 0;
$connected = false;
while ($attempts < 3 && !$connected) {
socket_clear_error($socket); // ယခင်အမှားအယွင်းကိုရှင်းလင်းပါ
$connected = @socket_connect($socket, $host, $port);
if (!$connected) {
$errCode = socket_last_error($socket);
echo "ပထမ ဦး ဆုံးကြိုးစားပါ " . ($attempts + 1) . " ဒုတိယဆက်သွယ်မှုမအောင်မြင်ပါ,အမှား:" . socket_strerror($errCode) . "\n";
sleep(1);
}
$attempts++;
}
အထက်ပါဥပမာတွင် Socket_Close_Error () ကိုမခေါ်ပါ။ သင်တိုင်းတာသည့်အမှားကုဒ်သည်ယခင်အချိန်၏ရလဒ်ဖြစ်နိုင်သည်။
အကယ်. socket သည်ပရိုဂရမ်တွင်ပုံမှန်အခြေအနေတွင်ရှိ, မရှိကိုသင်ဆုံးဖြတ်လိုလျှင်၎င်းကိုများသောအားဖြင့် socket_last_Error () နှင့်ပေါင်းစပ်အသုံးပြုသည်။ Socket_Close_ERRORRORRORE () သည် ယခင်စစ်ဆင်ရေးများကို 0 င်ရောက်စွက်ဖက်ခြင်းနှင့် 0 င်ရောက်ခြင်းကိုရှောင်ရှားရန်ပြည်နယ်မရမှီ။
socket_clear_error($socket);
$status = socket_get_status($socket);
if ($status['eof']) {
echo "ဝေးလံသောအိမ်ရှင်သည်ဆက်သွယ်မှုကိုပိတ်ထားသည်。\n";
}
များစွာသောစစ်ဆင်ရေးများသည် (ဥပမာ Eagainblock ကဲ့သို့) ယာယီအမှားများ (ဥပမာ Eagain သို့မဟုတ် EWouldblock ကဲ့သို့) ကိုဖတ်ရှုခြင်းနှင့်ရေးသားခြင်းမဟုတ်သော mode တွင်ဖတ်ရှုခြင်းနှင့်အရေးအသားအမှားများကိုမဖော်ပြပါ။ ဤအချိန်တွင် Socket_Close_Error () ကို အချိန်မရွေးခေါ်ဆိုမှုသည်ယုတ္တိဗေဒကိုရှင်းရှင်းလင်းလင်းထိန်းသိမ်းရန်သော့ချက်ဖြစ်သည်။
socket_set_nonblock($socket);
$result = @socket_read($socket, 2048);
if ($result === false) {
$error = socket_last_error($socket);
if ($error === SOCKET_EWOULDBLOCK || $error === SOCKET_EAGAIN) {
// ယာယီမဖတ်ရသေးသော,နောက်မှထပ်ကြိုးစားပါ
socket_clear_error($socket);
} else {
echo "လေ့လာရေးစစ်ဆင်ရေးမအောင်မြင်ပါ:" . socket_strerror($error) . "\n";
}
}
အမှားအယွင်းကိုအလိုအလျောက်ရှင်းလင်းလိမ့်မည်ဟုမှားယွင်းစွာ - အတွေ့အကြုံမရှိသေးပါ, အမှားအယွင်းကိုနောက်စစ်ဆင်ရေးတွင်အလိုအလျောက်ရှင်းလင်းလိမ့်မည်ဟုထင်မြင်ကြသည်။ Socket_Close_Error () ကိုအတိအလင်းခေါ်ရမည်။
သတ်မှတ်ထားသော socket ၏ရှင်းလင်းချက်ကိုလျစ်လျူရှုပါ - အခြား sockets ၏အခြေအနေကိုမတော်တဆရှင်းလင်းခြင်းမှရှောင်ရှားရန်သင်နှင့်သက်ဆိုင်သောအရင်းအမြစ်များကိုလက်ကိုင်ရန်သတ်သတ်မှတ်မှတ် socket သို့သွားရန်သတိရပါ။
Socket_Close_Error () ကို အသုံးပြု. Socket application များကို debugging လုပ်သည့်အခါ, ၎င်းသည်အမှားကိုင်တွယ်ခြင်း, ပြည်နယ်တရားစီရင်ခြင်းနှင့်ပိတ်ဆို့ခြင်းမဟုတ်သောဆက်သွယ်ရေးအတွက်အရေးကြီးသောအခန်းကဏ် plays မှပါဝင်သည်။ ၎င်းကို အသုံးပြု. ကျွမ်းကျင်မှုသည်သင်၏ debugging ထိရောက်မှုနှင့်အစီအစဉ်အားကောင်းစေနိုင်သည်။