လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> FocKer_set_set_block ကိုပျက်ကွက်သည့်အခါဘုံအမှားကုဒ်ခွဲခြမ်းစိတ်ဖြာခြင်း

FocKer_set_set_block ကိုပျက်ကွက်သည့်အခါဘုံအမှားကုဒ်ခွဲခြမ်းစိတ်ဖြာခြင်း

gitbox 2025-06-03

PHP Network Programming တွင် socket_set_set_block () function ကိုအသုံးပြုသည်။ ပိတ်ဆို့ခြင်း mode တွင် socket operations သည်ပြီးစီးသည်အထိအပြီးသတ်သို့မဟုတ်အမှားတစ်ခုဖြစ်ပေါ်သည်အထိစောင့်ဆိုင်းလိမ့်မည်။ ၎င်းသည်အချို့သောအခြေအနေများတွင်အလွန်အရေးကြီးသည်။ သို့သော် calling socket_set_set_block () သည်တစ်ခါတစ်ရံပျက်ကွက်မှုများကြောင့်အမှားအယွင်းများကိုဖြစ်ပေါ်စေသည်။ ဤအမှားကုဒ်များ၏အဓိပ္ပာယ်ကိုနားလည်ခြင်းသည်ပြ problems နာများကိုလျင်မြန်စွာရှာဖွေပြီး၎င်းတို့ကိုဖြေရှင်းနိုင်ရန်ကူညီလိမ့်မည်။

ဤဆောင်းပါးသည် socket_set_set_block () ကျရှုံးရန်, ၎င်း၏အဓိပ္ပာယ်ကိုရှင်းပြရန်နှင့်သက်ဆိုင်ရာဖြေရှင်းနည်းများပေးသည့်အခါဤဆောင်းပါးသည်သာမန်အမှားကုဒ်များကိုမိတ်ဆက်ပေးလိမ့်မည်။


1 ။ socket_set_sc.block function ကိုနိဒါန်း

Socket_set_block () သည် PHP ၏ Socket Extension မှသတ်မှတ်ထားသော socket ကို mode ကိုပိတ်ဆို့ရန်အသုံးပြုသည်။ ပိတ်ဆို့ခြင်း mode ကိုဆိုလိုသည်မှာဖတ်ခြင်းနှင့်ရေးခြင်းလုပ်ငန်းများသည်ချက်ချင်းပြန်လာမည့်အစား,

function ရှေ့ပြေးပုံစံသည်အောက်ပါအတိုင်းဖြစ်သည် -

 bool socket_set_block(resource $socket)

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


2 ။ ဘုံအမှားကုဒ်များနှင့်၎င်းတို့၏အဓိပ္ပါယ်များ

socket_set_sc_block () မအောင်မြင်ပါက, ဘုံအမှားကုဒ်များသည်အဓိကအားဖြင့်အောက်ပါအတိုင်းဖြစ်သည် -

2.1 ။ 10022 (wsaeinval) - မမှန်ကန်သော parameter သည်

  • ဖော်ပြချက် - 0 င်လာသည့် societ အရင်းအမြစ်သည်မမှန်ကန်ပါသို့မဟုတ် parameters များသည်မမှန်ကန်ပါ။

  • ဘုံအကြောင်းပြချက်များ :

    • လွန်သွားသော parameters များသည်တရားဝင် societ အရင်းအမြစ်မဟုတ်ပါ။

    • Socket ကိုပိတ်ထားသည်သို့မဟုတ်မှန်ကန်စွာဖန်တီးသည်မဟုတ်။

  • ဖြေရှင်းချက် -

    • Socket_create () ကိုမှန်ကန်စွာဟုခေါ်သော socket ဖန်တီးမှုလုပ်ငန်းစဉ်ကိုစစ်ဆေးပါ။

    • Socket Resour သည်ကြိုတင်မပျက်စီးနိုင်ကြောင်းအတည်ပြုပါ။

2.2 ။ 10093 (wsanotinitialised) - ကွန်ယက် subsystem မစတင်ပါ

  • ဖော်ပြချက် - Windows အရကွန်ယက် subsystem ကို အစပြု. မရရှိနိုင်ပါ

  • ဘုံအကြောင်းပြချက်များ :

    • PHP ပတ်ဝန်းကျင်ချွင်းချက်သို့မဟုတ်အချို့သော extension များမှန်ကန်စွာတင်မထားဘူး။

  • ဖြေရှင်းချက် -

    • PHP ပတ်ဝန်းကျင်ကိုပြန်လည်စတင်ပါ။

    • PHP socket extension ကိုပုံမှန်အားဖြင့်ဖွင့်ထားကြောင်းသေချာပါစေ။

2.3 ။ 10024 (WSEEMFILFile) - စနစ်ရှိရရှိနိုင်သည့်ဖိုင်ဖော်ပြချက်၏အများဆုံးတန်ဖိုးကိုရရှိ

  • ဖော်ပြချက် - စနစ်ကဖွင့်လှစ်ထားသည့် socket file descriptors အရေအတွက်သည်အထက်ပိုင်းကန့်သတ်ချက်ကိုရောက်ရှိခဲ့သည်။

  • ဘုံအကြောင်းပြချက်များ :

    • လျှောက်လွှာသည် socket များစွာကိုဖွင့်လှစ်သော်လည်းမပိတ်ထားပါ။

    • စနစ်ကန့်သတ်နည်းပါးသည်။

  • ဖြေရှင်းချက် -

    • အဆိုပါ optimizer မရှိတော့တဲ့ socket တွေကိုပိတ်လိုက်တယ်။

    • operating system file descriptor limit ကိုချိန်ညှိပါ (Linux သည် Ulimit ကို ချိန်ညှိနိုင်သည်။

2.4 ။ အခြားအမှားကုဒ်များ

  • 10048 (WSAeaddriLuse) - လိပ်စာကိုသိမ်းပိုက်ထားသည်။ ၎င်းသည် Socket_set_Set_Block () နှင့်တိုက်ရိုက်ဆက်နွယ်မှုမရှိပေမဲ့ Socket State သည်ပုံမှန်မဟုတ်သောအခါတစ်ခါတစ်ရံတွင်ပေါ်ပေါက်နိုင်သည်။

  • 10051 (wsaenetunreach) : ကွန်ယက်သည်လက်လှမ်းမမှီနိုင်ပါ။

  • 10054 (WSAECONNRESET) - ဆက်သွယ်မှုကိုပြန်လည်သတ်မှတ်သည်။

Socket_set_set_Set_Block ()) ကို သုံး. ဤအမှားကုဒ်များသည်ရှားပါးသည်။


3 ။ အမှားအယွင်းများကိုရှာဖွေရန်နှင့်ဖြေရှင်းနည်း

  1. အမှားကုဒ်နှင့်အမှားအချက်အလက်များကိုရယူပါ

 <?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";
}
?>
  1. အမှားကုဒ်အရပြ esh နာဖြေရှင်းခြင်း

  • အကယ်. ၎င်းသည် 10022 ဖြစ်ပါက socket အရင်းအမြစ်ကိုစစ်ဆေးပါ။

  • အကယ်. ၎င်းသည် 10093 ဖြစ်ပါကပတ်ဝန်းကျင်ကိုပြန်လည်စတင်ပါသို့မဟုတ် extension ကိုအတည်ပြုပါ။

  • အကယ်. ၎င်းသည် 10024 ဖြစ်ပါကအရင်းအမြစ်ဖြန့်ချိမှုနှင့်စနစ်ကန့်သတ်ချက်များကိုဂရုပြုပါ။

  1. Socket LifecycyChecy စစ်ဆေးပါ

Socket ဖန်တီးမှု, အသုံးပြုမှုနှင့်အနီးကပ်ခြင်းအတွက်လုပ်ငန်းစဉ်သတ်မှတ်ချက်များကိုသေချာစေရန်နှင့်ပိတ်ထားခြင်းသို့မဟုတ်ပိတ်ခြင်းကိုရှောင်ရှားပါ။

  1. ပတ်ဝန်းကျင်နှင့်ခွင့်ပြုချက်

အချို့သောကန့်သတ်ထားသောပတ်ဝန်းကျင်တွင် (ထိုကဲ့သို့သော shared hosting, ကွန်တိန်နာများကဲ့သို့), ခွင့်ပြုချက်များနှင့်သယံဇာတကန့်သတ်ချက်များသည်အမှားအယွင်းများဖြစ်ပေါ်စေနိုင်သည်။ လုပ်ငန်းလည်ပတ်မှုပတ် 0 န်းကျင်သည်လိုအပ်သောကွန်ရက်စစ်ဆင်ရေးများကိုထောက်ပံ့ကြောင်းစစ်ဆေးပါ။


4 ။ အကျဉ်းချုပ်

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";