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.

Kapcsolódó cikkek