လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> အဘယ်ကြောင့် program ကို socket_set_block ကိုသတ်မှတ်ပြီးအပြီးတွင်ပိတ်ဆို့ခြင်းမခံရသေးသနည်း။

အဘယ်ကြောင့် program ကို socket_set_block ကိုသတ်မှတ်ပြီးအပြီးတွင်ပိတ်ဆို့ခြင်းမခံရသေးသနည်း။

gitbox 2025-05-29

Socket_set_Stock function ကိုခေါ်ဆိုပြီးနောက် PHP ပရိုဂရမ်သည်အဘယ်ကြောင့်ပိတ်ဆို့ခြင်းမဟုတ်သော mode တွင်ပေါ်ပေါက်နေဆဲလဲ။

PHP တွင် Socket Programming ကိုအသုံးပြုသောအခါ socket_set_sc.block function ကိုများသောအားဖြင့် socket ကို mode ကိုပိတ်ဆို့ရန်အသုံးပြုသည်။ နောက်ဆက်တွဲဖတ်ရှုခြင်းနှင့်ရေးခြင်းစစ်ဆင်ရေးများသည်ဆက်လက်လုပ်ဆောင်ခြင်းမပြုမီဒေတာပြီးစီးရန် "စောင့်ဆိုင်း" နိုင်လိမ့်မည်ဟုမျှော်လင့်ရသည်။ သို့သော် developer များစွာသည်ပြ the နာကိုကြုံတွေ့ရလိမ့်မည် - Societ_set_set_block ကိုခေါ်ပြီးနောက်ပရိုဂရမ်သည်ပိတ်ဆို့ခြင်းမဟုတ်ဘဲမအောင်မြင်ပါ, ဒါဘာကြောင့်လဲ ဤဆောင်းပါးသည်နောက်ကွယ်မှအကြောင်းပြချက်များကိုနက်နက်ရှိုင်းရှိုင်းခွဲခြမ်းစိတ်ဖြာပြီးသက်ဆိုင်ရာဖြေရှင်းနည်းများပေးလိမ့်မည်။

1 ။ socket_set_slock ၏လုပ်ဆောင်ချက်များကိုနှင့်ကန့်သတ်ချက်များ

Socket_set_set_Lock ၏ function သည် socket to blocking mode ကိုဖွင့်ရန် socket တစ်ခုသတ်မှတ်ရန်ဖြစ်သည်။ ၎င်း၏ function ကိုလက်မှတ်ဖြစ်ပါတယ်:

 bool socket_set_block ( resource $socket )

ခေါ်ဆိုမှုသည်အောင်မြင်သည်ဆိုပါက စစ်မှန်ပါ

သို့သော်မှတ်သားရန်အရေးကြီးသည် -

  • Socket_set_Block သည်နောက်ခံ society အရင်းအမြစ်အတွက်ပိတ်ဆို့ခြင်း mode တစ်ခုဖြစ်ပြီး၎င်း၏အကျိုးသက်ရောက်မှုသည် socket ၏သတ်သတ်မှတ်မှတ်အခြေအနေပေါ်တွင်မူတည်သည်။

  • Socket သည်ပိတ်ဆို့ခြင်းမဟုတ်သော mode တွင်ရှိနေပြီးပါက (ဥပမာ, socket_set_set_set_setblock ) ကိုအရင်ဖုန်းခေါ်ဆိုပါက) ပိတ်ဆို့ခြင်း socket_set_block ကို ခေါ်ပြီးနောက်ပြန်လည်စတင်သင့်သည်။

  • သို့သော် socket ကိုယ်နှိုက်သည်အထူးပြည်နယ် (ဤသို့သောချိတ်ဆက်ထားသည့်သို့မဟုတ်အချို့သော system နောက်ပိုင်းအခြေအနေသို့အခြေအနေသည်) တွင်ပါ 0 င်ပါကပိတ်ဆို့ခြင်း mode ကို setting လုပ်ခြင်းသည်အကျိုးသက်ရောက်မည်မဟုတ်ပါ။

2 ။ အဘယ်ကြောင့်ဤအစီအစဉ်ကိုပိတ်ဆို့ခြင်းမဟုတ်သော mode မှာနေဆဲပေါ်လာပါဘူး?

  1. နောက်ခံ socket သည်အခြားကုဒ်များဖြင့်ပိတ်ဆို့ခြင်းမဟုတ်သောပြည်နယ်သို့ပြန်လည်သတ်မှတ်ထားသည်

socket settings များနှင့်ပ conflict ိပက်ခများရှိသည့်အစီအစဉ်တွင်အခြားကုဒ်သို့မဟုတ်မူဘောင်များရှိနိုင်သည်။ ဥပမာအားဖြင့် societ_set_set_block ကို မခေါ်မီအချို့သောစာကြည့်တိုက်များသို့မဟုတ်သတင်းများသည် sociec_set_set_set_setnwork ကို ခေါ်ယူခြင်းနှင့်နောက်ခံစနစ်ခေါ်ဆိုမှုပင်လျှင် socymal property များကိုပင်ပြောင်းလဲစေပြီးမမှန်ကန်သောနောက်ဆက်တွဲခေါ်ဆိုမှုများဖြစ်ပေါ်စေသည်။

  1. Socket Connection သည်အချို့သောပြတ်တောင်းပြတ်တောင်းသို့မဟုတ်အချိန်ကုန်ခြင်းအခြေအနေတွင်ရှိသည်

အချို့သော operating systems သို့မဟုတ် php ဗားရှင်းများတွင် Socket သည်ချိတ်ဆက်မှုရှိပါကသို့မဟုတ်အချိန်ကုန်များဖြစ်ပေါ်နေလျှင် Socket ၏ပိတ်ဆို့ခြင်း mode သည်အကျိုးသက်ရောက်မည်မဟုတ်ပါ။ ဥပမာအားဖြင့်:

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

  • Non-stated socket အမျိုးအစားများ (ထိုကဲ့သို့သော Unix Domain Socket, SSL SSL Sock Ssl Socke) ကိုမကိုက်ညီပါ။

  1. PHP ဗားရှင်းနှင့် operating system catatibility ပြ issues နာများ

ကွဲပြားခြားနားသော PHP ၏ဗားရှင်းများသည် socket function များကိုအကောင်အထည်ဖော်ခြင်းများအတွက်ကွဲပြားနိုင်သည်။ အထူးသဖြင့် Windows နှင့် Linux ပလက်ဖောင်းများ၏အပြုအမူသည်လည်းကွဲပြားခြားနားသည်။

  1. ခေါ်ဆိုမှု၏မမှန်ကန်ကြောင်းအမိန့်

အကယ်. Socket_set_sc_block ကိုပထမ ဦး ဆုံးဟုခေါ်သည်ဆိုပါက, ပိတ်ဆို့ခြင်း / ပိတ်ဆို့ခြင်းမဟုတ်သောအခြေအနေများကိုနောက်ပိုင်းတွင်ထည့်သွင်းထားသည့်အခြားလုပ်ဆောင်ချက်များကိုနောက်ပိုင်းတွင်ဟုခေါ်တွင်ပါ။

  1. Code တွင်အသုံးပြုသောလုပ်ဆောင်ချက်များကိုသူတို့ကိုယ်သူတို့ပိတ်ဆို့ခြင်းမဟုတ်ပါ

ဥပမာအားဖြင့် Socket_selection သည် ပိတ်ဆို့ခြင်းမဟုတ်သောစီးပွါးရေးလည်ပတ်မှုများကိုအသုံးပြုခြင်းသို့မဟုတ်ပိတ်ဆို့ခြင်းမဟုတ်သောလုပ်ငန်းလည်ပတ်မှုများကိုအသုံးပြုခြင်း,

3 ။ socket_set_stock ကို မှန်ကန်စွာအသုံးပြုနည်း။

  • ၎င်းကိုတစ်ကြိမ်သာနှင့်ကျိုးကြောင်းဆီလျော်သောနေရာ၌သာခေါ်ရန်သေချာအောင်လုပ်ပါ

Socket_set_set_block ကိုထည့်သွင်းထားသင့်သည်။ socket ကိုဖန်တီးပြီးအောင်မြင်စွာချိတ်ဆက်ပြီးအောင်မြင်စွာချိတ်ဆက်ထားပြီးနောက်ဆက်တွဲကုဒ်နံပါတ်များကိုမအောင်မြင်စေရန်သေချာစေပါ။

 $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, "gitbox.net", 80);
socket_set_block($socket);
  • အမှားစစ်ဆေးခြင်းနှင့်အတူပေါင်းစပ်

Function Call ခေါ်ဆိုမှုသည် မှန်ကန်မှု ရှိ / မရှိစစ်ဆေးပါ။

 if (!socket_set_block($socket)) {
    $errorcode = socket_last_error($socket);
    $errormsg = socket_strerror($errorcode);
    echo "ပိတ်ဆို့ခြင်း setting မအောင်မြင်ပါ: [$errorcode] $errormsg\n";
}
  • ရောနှောခြင်းမရှိသောလုပ်ဆောင်မှုများကိုမသုံးပါနှင့်

State_set_Block နှင့် Socket_set_set_set_set_set_set_nonblock ကို မရောနှောပါနှင့်။

အကယ်. သင်သည် PHP's Stream Encapsulture Socket Socket Socket ကိုအသုံးပြုနေပါကပိတ်ဆို့ခြင်း mode ကိုထိန်းချုပ်ရန် stream_set_blocking ကို သုံးနိုင်သည်။

 $stream = stream_socket_client("tcp://gitbox.net:80", $errno, $errstr, 30);
stream_set_blocking($stream, true);

4 ။ နမူနာကုဒ်

အောက်ပါဥပမာသည်ပိတ်ဆို့ခြင်း socket ကိုစနစ်တကျတည်ဆောက်ရန်နှင့် HTTP တောင်းဆိုမှုကိုမည်သို့ပေးပို့ရမည်ကိုပြသသည်။

 <?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    die("ဖန်တီးSocketဆုံးရှုံး: " . socket_strerror(socket_last_error()) . "\n");
}

$result = socket_connect($socket, "gitbox.net", 80);
if ($result === false) {
    die("连接ဆုံးရှုံး: " . socket_strerror(socket_last_error($socket)) . "\n");
}

// ပိတ်ဆို့ခြင်း mode ကို set
if (!socket_set_block($socket)) {
    die("ပိတ်ဆို့ခြင်း setting မအောင်မြင်ပါ: " . socket_strerror(socket_last_error($socket)) . "\n");
}

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

// ဒေတာကိုဖတ်တဲ့အခါလုပ်ကွက်,အကြောင်းအရာကိုလက်ခံရရှိသည်အထိသို့မဟုတ်ဆက်သွယ်မှုကိုပိတ်ထားသည်အထိ
$response = '';
while ($out = socket_read($socket, 2048)) {
    $response .= $out;
}

echo $response;

socket_close($socket);

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

  • Socket_set_set_Set_Block ၏ function သည် socket ကိုပိတ်ဆို့ရန်ဖြစ်သည်။

  • call socket_set_set_block သည်ပိတ်ဆို့ခြင်းမဟုတ်ကြောင်းပြသနေဆဲဖြစ်သည်။

  • မှန်ကန်သောချဉ်းကပ်နည်းသည် Setup လုပ်ဆောင်ချက်များကိုပိတ်ဆို့ခြင်းနှင့်ပိတ်ဆို့ခြင်းကိုမရောနှောခြင်းမှရှောင်ရှားရန် Socket ၏ပိတ်ဆို့ခြင်းလုပ်ငန်းစဉ်ကိုတင်းကြပ်စွာထိန်းချုပ်ရန်ဖြစ်သည်။

  • အခြေခံ socket နှင့် php ပတ်ဝန်းကျင်၌ကွဲပြားခြားနားမှုများကိုနားလည်ပြီး Debug သတင်းအချက်အလက်နေရာရေးပြ issues နာများကိုပေါင်းစပ်ပါ။

ဤသော့အချက်များကျွမ်းကျင်မှုသည် PHP တွင် Socket blocking blocking blocking blocking ကိုတားဆီးနိုင်ပြီးမမျှော်လင့်သောပြတ်တောင်းပြတ်တောင်းစွမ်းဆောင်ရည်ကိုရှောင်ရှားနိုင်သည်။