SOCKS руковање је успело. Сада релеј чита од клијента, пише ка одредишту, чека потпун одговор и тек онда поново чита од клијента. Тај след може да блокира сасвим валидну апликацију.

Када је TCP тунел успостављен, SOCKS не дефинише поруке унутар њега. Одредиште може да пошаље прво. Обе стране могу да шаљу независно. Једна страна може да пошаље кратак запис и затим чека одговор друге.

Преносите бајтове, а не нагађане трансакције

Позив пријема враћа доступне бајтове у складу са заставицама и стањем сокета. Он не говори општем релеју да је одговор апликације потпун. Чекање да се напуни произвољно велики бафер може да спречи прослеђивање мале поруке која је партнеру потребна да настави.

Користите постојећи модел конкурентности апликације за опслуживање оба смера: петљу догађаја, асинхрони I/O или други намерно изабран дизајн. Важно понашање је да напредак у једном смеру не захтева измишљену границу поруке у другом.

Држите два ограничена бафера на чекању

Подаци прочитани од клијента можда још чекају да стигну до одредишта, док подаци са одредишта чекају да стигну до клијента. Пратите те бајтове на чекању одвојено.

Слање може да упише мање бајтова него што је затражено. Задржите неуписани део; не одбацујте га и не пуштајте цео бафер поново. Привремено неуписав сокет је разлог да се чека исправан догађај спремности, а не да се непрестано врти.

Ограничите бафере. Ако је одредиште споро, настављање читања неограничених података клијента само премешта ред у меморију релеја. Повратни притисак значи паузирање читања када је одговарајући бафер на чекању пун и настављање када упис ослободи простор.

Крај у једном смеру захтева политику

TCP може да затвори смер слања док други смер још има корисне податке. Одлучите како да се то стање пренесе након што се баферовани бајтови испразне, и разликујте уредно затварање од грешке или рока.

Ништа од овога не захтева да релеј дешифрује или парсира корисни терет апликације. Потребно је исправно руковање током. Само повећање величине бафера не може да поправи релеј који чека погрешну страну или претпоставља да свако читање одговара једном целом захтеву.

Повезани чланци