PHP တွင်ကွန်ယက် socket များ operating လုပ်သည့်အခါအမှားကိုင်တွယ်ခြင်းသည်အမြဲတမ်းခေါင်းကိုက်ခြင်းဖြစ်နိုင်သည်။ PHP သည် function_clear_Error () ကိုထောက်ပံ့ပေးသည်။
ဤဆောင်းပါးသည်သင့်အား socket_clear_Ercror () တွင်သက်ဆိုင်သောအခြေအနေများနှင့်စပ်လျဉ်း။ ရွေးချယ်ရန်အထောက်အကူပြုရန်အမှန်တကယ်ကိစ္စများကိုပေါင်းစပ်ပြီး Socket Erlues အမှားများကို ပို. ကြော့ရှင်းစွာကိုင်တွယ်ရန်မည်သို့အသုံးပြုရမည်ကိုဥပမာပေးပါလိမ့်မည်။
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 အမှားအယွင်းကိုရှင်းလင်းပါ။
သို့သော်၎င်းကိုမည်သည့်အချိန်တွင်ခေါ်ရန်လိုအပ်သည့်အချိန်တွင်၎င်းကိုမဖော်ပြထားပါ။
ကွန်ယက်ထုတ်လွှင့်ခြင်းလုပ်ငန်းစဉ်အတွင်းအမှားအယွင်းများစွာဖြစ်ပေါ်လာနိုင်သည်။ 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 () ဟုမခေါ်ပါ။
ပိတ်ဆို့ခြင်းမဟုတ်သော 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;
}
အချိန်ကြာမြင့်စွာကျင်းပသော 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 ကိုပိုမိုခိုင်မာစေနိုင်သည့်ပိတ်ဆို့ခြင်းမဟုတ်သော, ရှည်လျားသောဆက်သွယ်မှုနှင့်အခြားအခြေအနေများတွင်အမှားအယွင်းများကိုအချိန်မီမသန့်ရှင်းစေရန်သတိရပါ။