လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> socket_acception () နားထောင်ခြင်းအခြေအနေပြ issues နာများကိုဖြေရှင်းရန်ကြိုးသို့မဟုတ် NetStat ကိုသုံးပါ

socket_acception () နားထောင်ခြင်းအခြေအနေပြ issues နာများကိုဖြေရှင်းရန်ကြိုးသို့မဟုတ် NetStat ကိုသုံးပါ

M66 2025-06-03

PHP, Socket_Accept () ကို အသုံးပြု. socket-based server applications များရေးသားသောအခါ client connection များကိုလက်ခံရရှိရန်သော့ချက်ဖြစ်သည်။ သို့သော်အချို့သောအခြေအနေများတွင်ပရိုဂရမ်ယုတ္တိဗေဒမှန်ကန်မှုရှိလျှင်ပင် socket_accept () သည် ပုံမှန်အားဖြင့်ဆက်သွယ်မှုကိုမရနိုင်ပါ။ ဤဆောင်းပါးသည်ဤပြ problem နာကိုလျင်မြန်စွာရှာဖွေရန်နှင့်ဖြေရှင်းရန် ကြိုး နှင့် NetStat tools များကိုမည်သို့အသုံးပြုရမည်ကိုဤဆောင်းပါးကရှင်းပြပါမည်။

1 ။ လိုအပ်ချက် - ပုံမှန် PHP Socket Server ဥပမာ

အောက်ဖော်ပြပါသည် Port 8080 ကိုနားထောင်သည့်ရိုးရှင်းသော PHP server program တစ်ခုဖြစ်သည်။

 <?php
$host = '0.0.0.0';
$port = 8080;

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, $host, $port);
socket_listen($socket);

echo "Server listening on $host:$port\n";

while (true) {
    $client = socket_accept($socket);
    if ($client === false) {
        echo "Failed to accept connection\n";
        continue;
    }

    $msg = "Hello from server\n";
    socket_write($client, $msg, strlen($msg));
    socket_close($client);
}
?>

Socket_Accept () မှားယွင်းသော () အစဉ်အလာကိုသင်တွေ့သောအခါ () အစဉ်အမြဲပြန်ပို့သောအခါ, Depth troubleshooting လုပ်ရန် System Tools များကိုအသုံးပြုရန်လိုအပ်သည်။

2 ။ system ခေါ်ဆိုမှုများကိုခြေရာခံရန်ပြင်ဆင်ပါ

Statre သည် Linux အောက်ရှိ System Call ခြေရာခံကိရိယာတစ်ခုဖြစ်သည်။ မည်သည့် system နောက်ခံလုပ်ဆောင်ချက်များကို Runtime တွင် PHP scripts များနှင့်၎င်းတို့၏ကွပ်မျက်မှုရလဒ်များကမည်သည့် system ကိုအခြေခံလုပ်ဆောင်ချက်များကိုခေါ်ယူနိုင်သနည်း။

အဆင့်

  1. PS ကိုအသုံးပြုပြီး php process pid ကိုရှာပါ။

     ps aux | grep php
    
  2. လုပ်ငန်းစဉ်နှင့်တွဲရန် ပြင်ဆင်မှုကို သုံးပါ။

     strace -p <PID> -e trace=network
    
  3. အောက်ပါအပြုအမူသည် output တွင်ရှိ, မရှိကိုသတိပြုပါ။

    • လက်ခံခြင်း (... ) = -1 : စနစ်ခေါ်ဆိုမှုသည်ပုံမှန်အားဖြင့် EAGAY , EANONABPOGECED ကဲ့သို့သောအမှားကုဒ်များနှင့်အတူလိုက်ပါသွားသည်။

    • နားထောင်ပါ (... ) သို့မဟုတ် bind (... ) အမှား - port ကိုသိမ်းပိုက်ထားသည့်သို့မဟုတ်ခွင့်ပြုချက်မလုံလောက်ကြောင်းဆိုလိုသည်

    • လက်ခံရန်ခေါ်ဆိုမှုမရှိပါ () - ပရိုဂရမ်သည်အခြားနေရာများတွင်ထည့်သွင်းနိုင်သည်

အကယ်. အကြိုးပြင်ဆင်မှု ကို လက်ခံသည် () သည်ပုံမှန်ဖြစ်သော်လည်းဆက်သွယ်မှုမရှိပါကပြ the နာသည် Network layer သို့မဟုတ် firewall တွင်ပြ problem နာဖြစ်နိုင်သည်။

3 ။ နားထောင်ခြင်းအခြေအနေကိုအတည်ပြုရန် NetStat သို့မဟုတ် Ss ကိုသုံးပါ

NetStat နှင့် SS တို့သည် port ကိုနားထောင်နေသည့်ပြည်နယ်တွင်ရှိပြီးဆက်သွယ်မှုတစ်ခုရှိမရှိစစ်ဆေးရန်အသုံးပြုနိုင်သည်။

နားထောင်ခြင်းအခြေအနေကိုစစ်ဆေးပါ။

 netstat -tlnp | grep :8080

သို့မဟုတ်:

 ss -tlnp | grep :8080

အောက်ပါနှင့်ဆင်တူ output များကိုသင်ကြည့်ရှုနိုင်သင့်သည်။

 tcp    LISTEN     0      128    0.0.0.0:8080    0.0.0.0:*     users:(("php",pid=12345,fd=3))
  • နားထောင်ခြင်းမရှိလျှင် Socket_bind () သို့မဟုတ် Socket_listen () ပျက်ကွက်ခြင်းမရှိလျှင်,

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

  • အကယ်. status သည် close_wait သို့မဟုတ် time_wait ဖြစ်ပါက connection life cycle သည်ပုံမှန်မဟုတ်သောကြောင့်ဖြစ်သည်။

4 ။ နောက်ထပ် debugging အကြံပြုချက်များ

  1. အမှားမက်ဆေ့ခ်ျကိုစစ်ဆေးပါ Sococke Call (Socket_Sarter_Error ()) ကိုနှိပ်ပြီး societ_stror outror (socket_last_error ()) ကို သုံးပါ။

  2. firewall သို့မဟုတ် selinux ကန့်သတ်ချက်များ <br> Port 8080 ကိုပိတ်ဆို့ခြင်းမခံရကြောင်းအတည်ပြုရန် Iptables သို့မဟုတ် Firewalld ကို သုံးပါ။

  3. ဆိပ်ကမ်းကိုအခြားပရိုဂရမ်များကသိမ်းပိုက်ထားသည် LSOF -i: 8080 ကို သုံးပါ။