PHP Network Programming တွင် socket_set_set_block () function ကိုအသုံးပြုသည်။ ပိတ်ဆို့ခြင်း mode တွင် socket operations သည်ပြီးစီးသည်အထိအပြီးသတ်သို့မဟုတ်အမှားတစ်ခုဖြစ်ပေါ်သည်အထိစောင့်ဆိုင်းလိမ့်မည်။ ၎င်းသည်အချို့သောအခြေအနေများတွင်အလွန်အရေးကြီးသည်။ သို့သော် calling socket_set_set_block () သည်တစ်ခါတစ်ရံပျက်ကွက်မှုများကြောင့်အမှားအယွင်းများကိုဖြစ်ပေါ်စေသည်။ ဤအမှားကုဒ်များ၏အဓိပ္ပာယ်ကိုနားလည်ခြင်းသည်ပြ problems နာများကိုလျင်မြန်စွာရှာဖွေပြီး၎င်းတို့ကိုဖြေရှင်းနိုင်ရန်ကူညီလိမ့်မည်။
ဤဆောင်းပါးသည် socket_set_set_block () ကျရှုံးရန်, ၎င်း၏အဓိပ္ပာယ်ကိုရှင်းပြရန်နှင့်သက်ဆိုင်ရာဖြေရှင်းနည်းများပေးသည့်အခါဤဆောင်းပါးသည်သာမန်အမှားကုဒ်များကိုမိတ်ဆက်ပေးလိမ့်မည်။
Socket_set_block () သည် PHP ၏ Socket Extension မှသတ်မှတ်ထားသော socket ကို mode ကိုပိတ်ဆို့ရန်အသုံးပြုသည်။ ပိတ်ဆို့ခြင်း mode ကိုဆိုလိုသည်မှာဖတ်ခြင်းနှင့်ရေးခြင်းလုပ်ငန်းများသည်ချက်ချင်းပြန်လာမည့်အစား,
function ရှေ့ပြေးပုံစံသည်အောက်ပါအတိုင်းဖြစ်သည် -
bool socket_set_block(resource $socket)
ခေါ်ဆိုမှုသည်အောင်မြင်မှုအတွက် စစ်မှန် ပြီးပျက်ကွက်ပြီးနောက် မှားယွင်းသော အရာဖြစ်သည်။ တစ်ချိန်တည်းမှာပင်အမှားကုဒ်ကို Socket_last_Error () ကို သုံး. socket_strorror () ဖြင့်ဖတ်နိုင်သောအမှားအချက်အလက်များကိုပြောင်းလဲနိုင်သည်။
socket_set_sc_block () မအောင်မြင်ပါက, ဘုံအမှားကုဒ်များသည်အဓိကအားဖြင့်အောက်ပါအတိုင်းဖြစ်သည် -
ဖော်ပြချက် - 0 င်လာသည့် societ အရင်းအမြစ်သည်မမှန်ကန်ပါသို့မဟုတ် parameters များသည်မမှန်ကန်ပါ။
ဘုံအကြောင်းပြချက်များ :
လွန်သွားသော parameters များသည်တရားဝင် societ အရင်းအမြစ်မဟုတ်ပါ။
Socket ကိုပိတ်ထားသည်သို့မဟုတ်မှန်ကန်စွာဖန်တီးသည်မဟုတ်။
ဖြေရှင်းချက် -
Socket_create () ကိုမှန်ကန်စွာဟုခေါ်သော socket ဖန်တီးမှုလုပ်ငန်းစဉ်ကိုစစ်ဆေးပါ။
Socket Resour သည်ကြိုတင်မပျက်စီးနိုင်ကြောင်းအတည်ပြုပါ။
ဖော်ပြချက် - Windows အရကွန်ယက် subsystem ကို အစပြု. မရရှိနိုင်ပါ ။
ဘုံအကြောင်းပြချက်များ :
PHP ပတ်ဝန်းကျင်ချွင်းချက်သို့မဟုတ်အချို့သော extension များမှန်ကန်စွာတင်မထားဘူး။
ဖြေရှင်းချက် -
PHP ပတ်ဝန်းကျင်ကိုပြန်လည်စတင်ပါ။
PHP socket extension ကိုပုံမှန်အားဖြင့်ဖွင့်ထားကြောင်းသေချာပါစေ။
ဖော်ပြချက် - စနစ်ကဖွင့်လှစ်ထားသည့် socket file descriptors အရေအတွက်သည်အထက်ပိုင်းကန့်သတ်ချက်ကိုရောက်ရှိခဲ့သည်။
ဘုံအကြောင်းပြချက်များ :
လျှောက်လွှာသည် socket များစွာကိုဖွင့်လှစ်သော်လည်းမပိတ်ထားပါ။
စနစ်ကန့်သတ်နည်းပါးသည်။
ဖြေရှင်းချက် -
အဆိုပါ optimizer မရှိတော့တဲ့ socket တွေကိုပိတ်လိုက်တယ်။
operating system file descriptor limit ကိုချိန်ညှိပါ (Linux သည် Ulimit ကို ချိန်ညှိနိုင်သည်။
10048 (WSAeaddriLuse) - လိပ်စာကိုသိမ်းပိုက်ထားသည်။ ၎င်းသည် Socket_set_Set_Block () နှင့်တိုက်ရိုက်ဆက်နွယ်မှုမရှိပေမဲ့ Socket State သည်ပုံမှန်မဟုတ်သောအခါတစ်ခါတစ်ရံတွင်ပေါ်ပေါက်နိုင်သည်။
10051 (wsaenetunreach) : ကွန်ယက်သည်လက်လှမ်းမမှီနိုင်ပါ။
10054 (WSAECONNRESET) - ဆက်သွယ်မှုကိုပြန်လည်သတ်မှတ်သည်။
Socket_set_set_Set_Block ()) ကို သုံး. ဤအမှားကုဒ်များသည်ရှားပါးသည်။
အမှားကုဒ်နှင့်အမှားအချက်အလက်များကိုရယူပါ
<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!$socket) {
echo "ဖန်တီးsocketဆုံးရှုံး:" . socket_strerror(socket_last_error()) . "\n";
exit;
}
if (!socket_set_block($socket)) {
$errCode = socket_last_error($socket);
echo "设置阻塞ဆုံးရှုံး,အမှားကုဒ်:{$errCode},အမှားသတင်းစကား:" . socket_strerror($errCode) . "\n";
}
?>
အမှားကုဒ်အရပြ esh နာဖြေရှင်းခြင်း
အကယ်. ၎င်းသည် 10022 ဖြစ်ပါက socket အရင်းအမြစ်ကိုစစ်ဆေးပါ။
အကယ်. ၎င်းသည် 10093 ဖြစ်ပါကပတ်ဝန်းကျင်ကိုပြန်လည်စတင်ပါသို့မဟုတ် extension ကိုအတည်ပြုပါ။
အကယ်. ၎င်းသည် 10024 ဖြစ်ပါကအရင်းအမြစ်ဖြန့်ချိမှုနှင့်စနစ်ကန့်သတ်ချက်များကိုဂရုပြုပါ။
Socket LifecycyChecy စစ်ဆေးပါ
Socket ဖန်တီးမှု, အသုံးပြုမှုနှင့်အနီးကပ်ခြင်းအတွက်လုပ်ငန်းစဉ်သတ်မှတ်ချက်များကိုသေချာစေရန်နှင့်ပိတ်ထားခြင်းသို့မဟုတ်ပိတ်ခြင်းကိုရှောင်ရှားပါ။
ပတ်ဝန်းကျင်နှင့်ခွင့်ပြုချက်
အချို့သောကန့်သတ်ထားသောပတ်ဝန်းကျင်တွင် (ထိုကဲ့သို့သော shared hosting, ကွန်တိန်နာများကဲ့သို့), ခွင့်ပြုချက်များနှင့်သယံဇာတကန့်သတ်ချက်များသည်အမှားအယွင်းများဖြစ်ပေါ်စေနိုင်သည်။ လုပ်ငန်းလည်ပတ်မှုပတ် 0 န်းကျင်သည်လိုအပ်သောကွန်ရက်စစ်ဆင်ရေးများကိုထောက်ပံ့ကြောင်းစစ်ဆေးပါ။
Socket_set_sc.block () မအောင်မြင်ပါကအဓိကအမှားကုဒ်သည်အရင်းအမြစ်၏ထိရောက်မှုကိုရောင်ပြန်ဟပ်ခြင်း, အမှားကုဒ်များ၏အဓိပ္ပါယ်ကိုကျိုးကြောင်းဆီလျော်သောနားလည်မှုကိုပေါင်းစပ်ခြင်းကုဒ်ယုတ္တိဗေဒနှင့်သဘာဝပတ်ဝန်းကျင်စစ်ဆေးမှုများကိုပေါင်းစပ်ပြီးပြ problems နာများကိုထိရောက်စွာရှာဖွေပြီးဖြေရှင်းနိုင်သည်။
Socket_set_Set_Block () မအောင်မြင်ပါက,
<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "ဖန်တီးsocketဆုံးရှုံး,အမှားကုဒ်:" . socket_last_error() . "\n";
exit;
}
if (!socket_set_block($socket)) {
$errorCode = socket_last_error($socket);
$errorMsg = socket_strerror($errorCode);
echo "设置阻塞模式ဆုံးရှုံး,အမှားကုဒ်: {$errorCode},အမှားသတင်းစကား: {$errorMsg}\n";
// 根据အမှားကုဒ်处理不同情况
switch ($errorCode) {
case 10022:
echo "အားမရှိသောsocketပစ္စည်းအင်းအား,ကျေးဇူးပြု။ ကျသင့်ငွေတွက်ပေးပါsocket是否正确ဖန်တီး。\n";
break;
case 10093:
echo "ကွန်ယက် subsystem ကိုအစပျိုးခြင်းမရှိပါ,ပြန်လည်စတင်ရန်ကြိုးစားပါPHPပတ်ဝန်းကျင်。\n";
break;
case 10024:
echo "System Fune Descriptor သည်အထက်ပိုင်းကန့်သတ်ချက်သို့ရောက်သည်,请释放ပစ္စည်းအင်းအား或调整系统限制。\n";
break;
default:
echo "အခြားအမှားများ,请根据အမှားသတင်းစကား进一步排查。\n";
break;
}
} else {
echo "အောင်မြင်စွာ set upsocketပိတ်ဆို့ mode ကို၌တည်၏。\n";
}
?>
URL ဥပမာရှိဒိုမိန်းအမည်ကို GitBox.net ဖြင့်အစားထိုးထားသည်။
$url = "https://gitbox.net/path/to/resource";