Handshake ya SOCKS ilifanikiwa. Sasa relay inasoma kutoka kwa mteja, inaandika kwenye lengwa, inasubiri jibu kamili na kisha tu ndipo inasoma tena kutoka kwa mteja. Mfululizo huo unaweza kusababisha deadlock kwenye programu halali kabisa.

Baada ya handaki la TCP kuanzishwa, SOCKS haifafanui ujumbe ulio ndani yake. Lengwa linaweza kutuma kwanza. Pande zote mbili zinaweza kutuma kwa uhuru. Upande mmoja unaweza kutuma rekodi fupi kisha kusubiri jibu la upande mwingine.

Peleka baiti, sio miamala inayokisiwa

Wito wa kupokea hurudisha baiti zinazopatikana kulingana na bendera na hali ya socket. Hauambi relay ya jumla kwamba jibu la programu limekamilika. Kusubiri buffer kubwa kiholela ijae kunaweza kuzuia upelekaji wa ujumbe mdogo ambao mwenzake anauhitaji ili kuendelea.

Tumia modeli iliyopo ya usawazishaji wa programu kuhudumia pande zote mbili: mzunguko wa matukio, I/O isiyo ya wakati mmoja au muundo mwingine uliochaguliwa kwa makusudi. Tabia muhimu ni kwamba maendeleo upande mmoja hayahitaji mpaka wa ujumbe uliobuniwa upande mwingine.

Hifadhi buffer mbili zinazosubiri zenye mipaka

Data iliyosomwa kutoka kwa mteja inaweza bado kusubiri kufika lengwa, wakati data kutoka lengwa inasubiri kufika kwa mteja. Fuatilia baiti hizo zinazosubiri kwa tofauti.

Utumaji unaweza kuandika baiti chache kuliko zilizoombwa. Hifadhi sehemu isiyoandikwa; usiitupilie mbali au kurudia buffer yote. Socket isiyoweza kuandikwa kwa muda ni sababu ya kusubiri tukio sahihi la utayari, sio kuzunguka mfululizo.

Weka mipaka kwenye buffer. Ikiwa lengwa ni polepole, kuendelea kusoma data isiyo na kikomo ya mteja kunahamisha foleni kwenye kumbukumbu ya relay tu. Shinikizo la nyuma linamaanisha kusimamisha usomaji wakati buffer inayosubiri inayolingana imejaa na kuanza tena wakati uandikaji unatoa nafasi.

Mwisho upande mmoja unahitaji sera

TCP inaweza kufunga mwelekeo wa kutuma wakati mwelekeo mwingine bado una data muhimu. Amua jinsi ya kueneza hali hiyo baada ya baiti zilizohifadhiwa kumalizika, na tofautisha kufunga kwa mpangilio na hitilafu au tarehe ya mwisho.

Hakuna hata moja ya haya inayohitaji relay kufumbua au kuchanganua payload ya programu. Inahitaji utunzaji sahihi wa mtiririko. Kuongeza ukubwa wa buffer pekee hakuwezi kurekebisha relay inayosubiri upande mbaya au kudhani kila usomaji unalingana na ombi moja kamili.

Makala zinazohusiana