SOCKS-kätlus õnnestus. Nüüd loeb relee kliendilt, kirjutab sihtkohta, ootab täielikku vastust ja alles seejärel loeb uuesti kliendilt. See järjestus võib täiesti korras rakenduse ummikseisu viia.

Pärast TCP-tunneli loomist ei määratle SOCKS selle sees olevaid sõnumeid. Sihtkoht võib saata esimesena. Mõlemad pooled võivad saata sõltumatult. Üks pool võib saata lühikese kirje ja seejärel oodata teise vastust.

Edasta baite, mitte oletatud tehinguid

Vastuvõtukutse tagastab saadaolevad baidid vastavalt oma lippudele ja soketi olekule. See ei ütle üldisele releele, et rakenduse vastus on täielik. Suvaliselt suure puhvri täitumise ootamine võib takistada väikese sõnumi edastamist, mida partner jätkamiseks vajab.

Kasuta mõlema suuna teenindamiseks rakenduse olemasolevat konkurentsimudelit: sündmustetsükkel, asünkroonne I/O või mõni muu teadlikult valitud lahendus. Oluline on, et edenemine ühes suunas ei nõuaks väljamõeldud sõnumipiiri teises.

Hoia kahte piiratud ootel puhvrit

Kliendilt loetud andmed võivad alles oodata sihtkohta jõudmist, samal ajal kui sihtkoha andmed ootavad klienti jõudmist. Jälgi neid ootel baite eraldi.

Saatmine võib kirjutada vähem baite kui paluti. Säilita kirjutamata osa; ära viska seda ära ega korda tervet puhvrit. Ajutiselt kirjutamatu sokett on põhjus oodata õiget valmidussündmust, mitte pöörelda pidevalt.

Piira puhvrid. Kui sihtkoht on aeglane, viib piiramatu kliendiandmete lugemise jätkamine järjekorra lihtsalt relee mällu. Vastusurve tähendab lugemise peatamist, kui vastav ootel puhver on täis, ja jätkamist, kui kirjutamine ruumi teeb.

Lõpp ühes suunas nõuab poliitikat

TCP võib sulgeda saatmissuuna, samal ajal kui teises suunas on veel kasulikke andmeid. Otsusta, kuidas seda olekut pärast puhverdatud baitide tühjendamist edasi anda, ja erista korrapärast sulgemist veast või tähtajast.

Miski sellest ei nõua, et relee dekrüpteeriks või parsiks rakenduse kasulikku koormust. Tal on vaja õiget voo käsitlemist. Ainult puhvri suuruse suurendamine ei paranda releed, mis ootab vale poolt või eeldab, et iga lugemine vastab ühele terviklikule päringule.

Seotud artiklid