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 ئەتكۈزگۈچنىڭ ئۈستىدە تۇتۇڭ.