စောင့်ဆိုင်းနေသော ဘိုက်များကို ထုတ်ပြီးနောက် TCP တစ်ဝက်ပိတ်မှုကို ရှေ့သို့ပို့ခြင်း
တန်းစီနေသော ဒေတာများ မဆုံးရှုံးစေဘဲ၊ အခြားဦးတည်ချက်ရှိ တုံ့ပြန်ချက်ကို မဖြတ်တောက်ဘဲ TCP ပရောက်စီတွင် EOF ကို ကိုင်တွယ်ပါ။
ကလိုင်းယင့်က ပို့ခြင်းပြီးဆုံးသည်၊ ပရောက်စီက EOF ကို မြင်သည်၊ တုံ့ပြန်ချက် ပျောက်ကွယ်သွားသည်။ ပရောက်စီ၏ ဆော့ကက်နှစ်ခုကို ချက်ချင်းပိတ်ခြင်းက ထိုအစီအစဉ်အတိုင်း ဖြစ်စေနိုင်သည်။ TCP ရယ်လေးတွင် ဦးတည်ချက်တစ်ခု၏ စနစ်တကျအဆုံးသတ်ခြင်းသည် အခြားဦးတည်ချက် ပြီးဆုံးပြီဟု မဆိုလိုပါ။
တောင်းဆိုချက်တစ်ခု ပို့ပြီး မိမိ၏ ပို့သည့်ဘက်ကို ပိတ်ကာ အဖြေကို စောင့်နေသော ကလိုင်းယင့်ကို သုံးသပ်ပါ:
client -- request, then FIN --> proxy --> service
client <-------- reply ------- proxy <-- service
ပရောက်စီတွင် TCP ချိတ်ဆက်မှု နှစ်ခုနှင့် အမှီအခိုကင်းစွာ ရွေ့လျားသော ဘိုက်စထရီးမ် နှစ်ခု ရှိသည်။ ၎င်းသည် မိမိမတိုင်မီ ရှိသော ဘိုက်များကို ပို့ပြီးနောက် ထည့်သွင်းမှု၏ အဆုံးသတ် အချက်ပြမှုကိုပါ ရှေ့သို့ သယ်ဆောင်ရမည်။
EOF မပို့မီ တန်းစီမှုကို ထုတ်ပါ
TCP စထရီးမ်တွင် သုညမဟုတ်သော အရွယ်အစားဖြင့် လက်ခံရာတွင် သုည ပြန်လာခြင်းသည် ထိုဝင်လာသော စထရီးမ်၏ စနစ်တကျအဆုံးသတ်မှုကို ညွှန်ပြသည်။ ထိုဖတ်သည့်ဦးတည်ချက်ကို ပြီးဆုံးပြီဟု အမှတ်အသားပြုပါ။ ၎င်းမှ နောက်ထပ်ထည့်သွင်းမှုကို စောင့်ခြင်းရပ်ပါ၊ သို့သော် ဆန့်ကျင်ဘက် ဆော့ကက်အတွက် တန်းစီပြီးသား ဘိုက်များကို ထိန်းထားပါ။
ကလိုင်းယင့်မှ ဝန်ဆောင်မှုသို့ တန်းစီမှု ထုတ်ပြီးနောက် POSIX ဆော့ကက်တွင် shutdown(service_socket, SHUT_WR) ကို ခေါ်ပါ။ ၎င်းက ဝန်ဆောင်မှုဆီသို့ နောက်ထပ်ပို့ခြင်းကို အဆုံးသတ်ပြီး ဝန်ဆောင်မှုမှ ကလိုင်းယင့်သို့ ဦးတည်ချက်ကို ရရှိနိုင်ဆဲ ဖြစ်စေသည်။ ဝန်ဆောင်မှုက ၎င်း၏ အဖြေကို ပြီးဆုံးသောအခါ အဖြေတန်းစီမှုကို ထုတ်ပြီးနောက် မှန်ပြောင်းလုပ်ဆောင်ချက်ကို အသုံးပြုပါ။
ဒက်စခရစ်တာများကို ပိတ်ခြင်းသည် ဦးတည်ချက်နှစ်ခုလုံးနှင့် ၎င်းတို့၏ စောင့်ဆိုင်းနေသော ဘူဖာများ ပြီးဆုံးသည့်အချက်တွင် သို့မဟုတ် အမှား သို့မဟုတ် ပယ်ဖျက်မှုက အဆုံးသတ်ရန် လိုအပ်သည့်နေရာတွင် ဖြစ်သည်။ မိမိ၏ ကျန်တစ်ဝက်ကို ဘယ်တော့မှ မပြီးစီးသော အဖော်အတွက် ကန့်သတ်အချိန်ကို ထိန်းထားပါ။
အသင့်ဖြစ်ခြင်းသည် ဖတ်ရန် ဖိတ်ကြားချက်ဖြစ်သည်
ဖတ်နိုင်သော ဆော့ကက်တွင် ဒေတာ သို့မဟုတ် EOF အခြေအနေ ရှိနိုင်သည်။ recv ကို ခေါ်ပြီး ၎င်း၏ ရလဒ်ကို အနက်ဖွင့်ပါ။ အပေါင်းကိန်းများသည် ပို့ရမည့် ဘိုက်များဖြစ်သည်၊ သုညသည် ဦးတည်ချက်၏ အဆုံးဖြစ်သည်။ ပိတ်ဆို့မှုမရှိသော ဆော့ကက်တွင် EAGAIN သို့မဟုတ် EWOULDBLOCK သည် ယခု နောက်ထပ်ထည့်သွင်းမှု မရှိဟု ဆိုလိုပြီး EINTR က ထပ်စမ်းရန် လိုအပ်နိုင်သည်။ နှစ်ခုလုံးသည် EOF နှင့် တူညီသော ဖြစ်ရပ် မဟုတ်ပါ။
ပြန်လာသော ဘိုက်ဘူဖာတွင် FIN အလံကို မရှာပါနှင့်။ TCP သည် ဤ API သို့ အစီအစဉ်တကျ ဘိုက်စထရီးမ်ကို ပေးအပ်သည်၊ ပက်ကက်နယ်နိမိတ်များနှင့် FIN အပိုင်းသည် သာမန် အပလီကေးရှင်း ပါယ်လို့ဒ် မဟုတ်ပါ။
ဤသည် အကြမ်းဘိုက် ဥမင်လိုဏ်ခေါင်း၏ သက်တမ်းစက်ဝန်းဖြစ်သည်။ မက်ဆေ့ချ်များကို ပိုင်းခြားစိတ်ဖြာသော HTTP ပရောက်စီသည် HTTP ဘောင်ခတ်မှုကို လေးစားရန် လိုအပ်ဆဲဖြစ်ပြီး TLS ကို အဆုံးသတ်သော ပရောက်စီတွင်လည်း TLS ပိတ်ခြင်း ပရိုတိုကော ရှိသည်။ ထိုပရိုတိုကော ဆုံးဖြတ်ချက်များကို ဦးတည်ချက်အလိုက် TCP ရယ်လေး၏ အထက်တွင် ထားပါ။