Fullduplekse stream en tsjindruk yn in SOCKS-relay
Untwerp de relaystream om ûnôfhinklike bytestreams, partiele I/O, beheinde buffers en tsjindruk hinne, yn stee fan raasde antwurdgrutten.
De SOCKS-hânskikking is slagge. No lêst it relay fan de klant, skriuwt nei de bestimming, wachtet op in folslein antwurd en lêst pas dêrnei wer fan de klant. Dy folchoarder kin in folslein jildige applikaasje fêstsette.
Sadree't de TCP-tunnel stiet, definiearret SOCKS de berjochten deryn net. De bestimming kin earst stjoere. Beide kanten kinne ûnôfhinklik stjoere. Ien kant kin in koart record stjoere en dan op it antwurd fan de oare wachtsje.
Stjoer bytes troch, gjin raasde transaksjes
In ûntfangst-oprop jout de beskikbere bytes werom neffens syn flaggen en de steat fan de socket. It fertelt in generyk relay net dat in applikaasje-antwurd folslein is. Wachtsje oant in willekeurich grutte buffer fol is, kin foarkomme dat it lytse berjocht trochjûn wurdt dat de partner nedich hat om troch te gean.
Brûk it besteande konkurrinsjemodel fan de applikaasje om beide rjochtingen te betsjinjen: in barrenslus, asynchrone I/O of in oar mei opsetsin keazen ûntwerp. It wichtichste gedrach is dat foarútgong yn ien rjochting gjin betochte berjochtsgrins yn de oare freget.
Hâld twa beheinde wachtende buffers
Gegevens lêzen fan de klant wachtsje miskien noch om de bestimming te berikken, wylst gegevens fan de bestimming wachtsje om de klant te berikken. Folgje dy wachtende bytes apart.
In ferstjoering kin minder bytes skriuwe as frege. Behâld it ûnskreaune part; smyt it net fuort en spylje net de hiele buffer opnij ôf. In tydlik net-skriuwbere socket is reden om op it krekte gereedheidsevenemint te wachtsjen, net om hieltyd te draaien.
Behein de buffers. As de bestimming stadich is, ferpleatst trochgean mei it lêzen fan ûnbeheinde klantgegevens de wachtrige gewoan nei it ûnthâld fan it relay. Tsjindruk betsjut it lêzen pauzearje as de byhearrende wachtende buffer fol is en wer trochgean as skriuwen romte makket.
In ein yn ien rjochting freget in belied
TCP kin in stjoerrjochting slute wylst de oare rjochting noch nuttige gegevens hat. Beslis hoe't dy tastân trochjûn wurdt neidat de buffere bytes útrûn binne, en ûnderskied in oardere sluting fan in flater of in deadline.
Ferjildichs hjirfan freget net dat it relay de payload fan de applikaasje ûntsiferret of parsearret. It hat krekte streamôfhanneling nedich. Allinnich de buffergrutte fergrutsje kin in relay net reparearje dat op de ferkearde kant wachtet of oannimt dat elke lêzing oerienkomt mei ien hiele oanfraach.