පොරොත්තුවෙන් ඇති බයිට් ඉවත් කිරීමෙන් පසු 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 රිලේට ඉහළින් තබා ගන්න.