Socket_cMsg_space သည် PHP ၏လုပ်ဆောင်မှုတစ်ခုဖြစ်သည်။ ၎င်းကို socket_sendmmmsg နှင့် socket_recvmsg တို့ ဖြင့်အသုံးပြုလေ့ရှိသည်။ ဤလုပ်ဆောင်မှု၏အဓိကရည်ရွယ်ချက်မှာထောက်ပံ့သောထိန်းချုပ်မှုမက်ဆေ့ခ်ျများအပေါ် အခြေခံ. အချက်အလက်များကိုပေးပို့ရန်သို့မဟုတ်လက်ခံရန်လိုအပ်သောနေရာကိုတွက်ချက်ရန်ဖြစ်သည်။
Socket_cMsg_space ကို သုံးသောအရေးအကြီးဆုံးအရာမှာကွဲပြားခြားနားသော protocol မိသားစုများအကြားကွဲပြားခြားနားမှုများကိုစဉ်းစားရန်လိုအပ်သည်။ ဘုံ protocol မိသားစုများတွင်:
IPv4 (AF_INT)
IPv6 (AF_INT6)
Unix ဒိုမိန်း sockets (af_unix)
မတူညီသော protocol မိသားစုများအတွက်ထိန်းချုပ်မှုမက်ဆေ့ခ်ျကိုပုံစံသည်ကွဲပြားနိုင်သည်။ IPv4 နှင့် IPv6 တို့၏အဓိကကွာခြားချက်မှာလိပ်စာအရွယ်အစားမှာလိပ်စာအရွယ်အစားမှာ IPv4 သည် 4 bytes ကိုအသုံးပြုသည်။ IPv6 သည် 16 bytes ကိုအသုံးပြုသည်။ ထို့အပြင် IPv6 သည်ထိန်းချုပ်မှုမက်ဆေ့ခ်ျအသစ်များနှင့်ရွေးချယ်စရာအသစ်များကိုမိတ်ဆက်ပေးသည်။ ထို့ကြောင့်နောက်ထပ်နေရာလိုအပ်သည်။
IPv4 နှင့် IPv6 လိပ်စာအရှည်ကွဲပြားမှု
IPv4 တွင်လိပ်စာအရှည်သည် 4 bytes ဖြစ်သည်။
IPv6 တွင်လိပ်စာအရှည်သည် 16 bytes ဖြစ်သည်။
ထို့ကြောင့်, Socket_cMsg_space function ကိုအသုံးပြုသောအခါသင်၏လျှောက်လွှာသည် protocol နှစ်ခုလုံးကိုထောက်ပံ့ပါကကွဲပြားခြားနားသော protocol မိသားစုများအပေါ် အခြေခံ. လိုအပ်သောထိန်းချုပ်မှုမက်ဆေ့ခ်ျအာကာသတွက်ချက်ရန်လိုအပ်သည်။ ဥပမာအားဖြင့် IPv6 သည်လိပ်စာအချက်အလက်နှင့်အခြားထိန်းချုပ်မှုမက်ဆေ့ခ်ျများပေးပို့ရန်နေရာပိုလိုအပ်သည်။
IPv6-screen control message များ
IPv6 သည်ထိန်းချုပ်မှုအသစ်များကိုမိတ်ဆက်ပေးသည်။
routing header
လိပ်စာရွေးစရာ
Socket_cMsg_space ကိုအသုံးပြုပြီးတဲ့အခါသင့်ရဲ့ထိန်းချုပ်မှုမက်ဆေ့ခ်ျကိုမှန်ကန်စွာစနစ်တကျမှန်ကန်စွာတပ်ဆင်ပြီးဒီအပိုဆောင်းလယ်ကွင်းအတွက်နေရာအလုံအလောက်ထားခဲ့ပါ။
IPv4 နှင့် IPv6 အကြားကွဲပြားခြားနားမှုများကိုမည်သို့ကိုင်တွယ်ဖြေရှင်းရမည်ကိုပြသသည့်ရိုးရှင်းသော PHP Code နမူနာတစ်ခုရှိသည်။
<?php
// ဖန်တီး IPv4 Sockets
$socket_ipv4 = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
// ဖန်တီး IPv6 Sockets
$socket_ipv6 = socket_create(AF_INET6, SOCK_STREAM, SOL_TCP);
// ထိန်းချုပ်မှုမက်ဆေ့ခ်ျကိုတက် setting
$cmsg_ipv4 = socket_cmsg_space(SOL_SOCKET, SCM_RIGHTS, 4);
$cmsg_ipv6 = socket_cmsg_space(SOL_SOCKET, SCM_RIGHTS, 16);
// protocol မိသားစုအရလိုအပ်သောနေရာကိုတွက်ချက်ပါ
if (socket_getsockname($socket_ipv4, $address, $port)) {
echo "IPv4 မက်ဆေ့ခ်ျကိုအာကာသကိုထိန်းချုပ်ပါ: " . $cmsg_ipv4 . " ဒရယ်\n";
}
if (socket_getsockname($socket_ipv6, $address, $port)) {
echo "IPv6 မက်ဆေ့ခ်ျကိုအာကာသကိုထိန်းချုပ်ပါ: " . $cmsg_ipv6 . " ဒရယ်\n";
}
// 关闭Sockets
socket_close($socket_ipv4);
socket_close($socket_ipv6);
?>
အထက်ပါကုဒ်တွင် IPv4 နှင့် IPv6 အတွက် Sockets အတွက် Socket များကိုဖန်တီးပြီး၎င်းတို့အတွက်လိုအပ်သောထိန်းချုပ်မှုမက်ဆေ့ခ်ျနေရာကိုအသီးသီးတွက်ချက်သည်။ ထို့နောက် societ_etsockname function function function function function ကိုမှတစ်ဆင့် socket_etsockname function function ကိုကြည့်ပါ။
protocol မိသားစုကိုမှန်ကန်စွာရွေးချယ်ပါ
Socket_create ကို ခေါ်ဆိုသည့်အခါလိုအပ်သောမှန်ကန်သော protocol မိသားစုကိုရွေးချယ်ရန်သေချာအောင်လုပ်ပါ။ ဥပမာအားဖြင့် IPv4 နှင့် IPv6 ကိုသင်ထောက်ပံ့ရန်လိုအပ်ပါကကွဲပြားသော sockets များကိုသီးခြားစီဖန်တီးပြီး societ တစ်ခုစီသည်မှန်ကန်သော protocol မိသားစု ( AF_INT သို့မဟုတ် AF_INT6 ) ကိုအသုံးပြုပါ။
protocol မိသားစုလိုက်စားနိုင်
သင်၏လျှောက်လွှာသည်တစ်ချိန်တည်းတွင် protocol မိသားစုများကိုထောက်ပံ့ရန်လိုအပ်ပါက (ဥပမာ, IPv4 နှင့် IPv6) သည် protocols နှစ်ခုလုံးအတွက်သင့်တော်ကြောင်းသေချာပါစေ။ အထူးသဖြင့်မက်ဆေ့ခ်ျများပို့သည့်အခါမှန်ကန်သောလိပ်စာပုံစံကိုသေချာစွာရွေးချယ်ပါ။
စမ်းသပ်ခြင်းနှင့်စိစစ်အတည်ပြု
ကွဲပြားခြားနားသော protocol မိသားစုများအကြားကွဲပြားခြားနားမှုများကြောင့်သင်၏လျှောက်လွှာသည်ကွန်ယက်ပတ်ဝန်းကျင်တွင်သင်၏လျှောက်လွှာကိုစနစ်တကျအလုပ်လုပ်ရန်လုံလောက်သောစစ်ဆေးမှုပြုလုပ်ရန်အကြံပြုသည်။ စမ်းသပ်စဉ်အတွင်းသင်၏ပရိုဂရမ်သည်ထိန်းချုပ်မှုမက်ဆေ့ခ်ျများကိုမှန်ကန်စွာကိုင်တွယ်နိုင်ပြီးမှတ်ဉာဏ်ပြည့်ဝသောသို့မဟုတ်ဒေတာအဂတိလိုက်စားမှုမရှိပါ။
socket_cmsg_space ကိုအသုံးပြုခြင်းအားဖြင့်ကွဲပြားခြားနားသော protocol မိသားစုများအကြားကွဲပြားခြားနားမှုများကိုစနစ်တကျကိုင်တွယ်ခြင်းဖြင့်သင်၏ PHP application ကို IPv4 နှင့် IPv6 Network ပတ် 0 န်းကျင်တွင်စနစ်တကျလည်ပတ်နိုင်ကြောင်းသေချာစေနိုင်သည်။ မက်ဆေ့ခ်ျကိုအာကာသကိုထိန်းချုပ်ရန်နှင့် protocol မိသားစု၏အထူးလိုအပ်ချက်များကိုစဉ်းစားရန်တွက်ချက်မှုများကိုမှန်ကန်သောတွက်ချက်မှုများကိုစဉ်းစားပါ။