Teljes duplex adatfolyam és visszanyomás egy SOCKS relében
A relé folyamát független bájtfolyamokra, részleges I/O-ra, korlátozott pufferekre és visszanyomásra építse, ne feltételezett válaszméretekre.
A SOCKS kézfogás sikerült. Most a relé az ügyféltől olvas, a célhelyre ír, teljes válaszra vár, és csak ezután olvas ismét az ügyféltől. Ez a sorrend teljesen érvényes alkalmazást is holtpontra juttathat.
Amint a TCP-alagút létrejön, a SOCKS nem határozza meg a benne lévő üzeneteket. A célhely küldhet először. Mindkét fél küldhet egymástól függetlenül. Az egyik fél küldhet egy rövid rekordot, majd várhat a másik válaszára.
Bájtokat továbbítson, ne feltételezett tranzakciókat
A fogadási hívás a jelzői és a socket állapota szerint adja vissza az elérhető bájtokat. Nem mondja meg egy általános relének, hogy az alkalmazás válasza teljes. Egy tetszőlegesen nagy puffer megtelésére várni megakadályozhatja annak a kis üzenetnek a továbbítását, amelyre a partnernek a folytatáshoz szüksége van.
Használja az alkalmazás meglévő párhuzamossági modelljét mindkét irány kiszolgálására: eseményhurok, aszinkron I/O vagy más tudatosan választott terv. A fontos viselkedés az, hogy az egyik irányban elért előrehaladás nem igényel kitalált üzenethatárt a másikban.
Tartson két korlátozott várakozó puffert
Előfordulhat, hogy az ügyféltől olvasott adatok még a célhelyre várakoznak, míg a célhely adatai az ügyfélre várakoznak. Ezeket a várakozó bájtokat külön kövesse.
Egy küldés kevesebb bájtot írhat, mint amennyit kértek. Tartsa meg az íratlan részt; ne dobja el, és ne játssza újra a teljes puffert. Az átmenetileg írhatatlan socket ok arra, hogy a megfelelő készültségi eseményre várjon, nem pedig folyamatos pörgésre.
Korlátozza a puffereket. Ha a célhely lassú, a korlátlan ügyféladatok folyamatos olvasása csak a sorba állítást helyezi át a relé memóriájába. A visszanyomás azt jelenti, hogy a megfelelő várakozó puffer megteltekor szüneteltetjük az olvasást, és amikor az írás helyet szabadít fel, folytatjuk.
Az egy irányú befejezéshez szabályzat kell
A TCP lezárhat egy küldési irányt, miközben a másik irányban még hasznos adatok vannak. Döntse el, hogyan továbbítsa ezt az állapotot a pufferelt bájtok kiürülése után, és különböztesse meg a rendezett lezárást a hibától vagy a határidőtől.
Ezek egyike sem követeli meg, hogy a relé visszafejtse vagy elemezze az alkalmazás hasznos terhét. Helyes adatfolyam-kezelésre van szüksége. Önmagában a pufferméret növelése nem javítja meg azt a relét, amely a rossz oldalra vár, vagy azt feltételezi, hogy minden olvasás egy teljes kérésnek felel meg.