Bir SOCKS Aktarma Merkezinde Tam Çift Yönlü Akış ve Geri Basınç
Aktarma akışını tahmin edilen yanıt boyutları yerine bağımsız bayt akışları, kısmi I/O, sınırlı tamponlar ve geri basınç etrafında tasarlayın.
SOCKS el sıkışması başarılı oldu. Şimdi aktarma istemciden okur, hedefe yazar, tam bir yanıt bekler ve ancak ondan sonra istemciden yeniden okur. Bu sıra tamamen geçerli bir uygulamayı kilitlenmeye sokabilir.
TCP tüneli kurulduktan sonra SOCKS içindeki mesajları tanımlamaz. Hedef önce gönderebilir. Her iki taraf bağımsız olarak gönderebilir. Bir taraf kısa bir kayıt gönderip ardından diğerinin yanıtını bekleyebilir.
Tahmin edilen işlemleri değil baytları iletin
Bir alma çağrısı, bayraklarına ve soket durumuna göre mevcut baytları döndürür. Genel bir aktarmaya uygulama yanıtının tamamlandığını söylemez. Keyfi olarak büyük bir tamponun dolmasını beklemek, eşin devam etmek için ihtiyaç duyduğu küçük mesajın iletilmesini engelleyebilir.
Her iki yönü de hizmet etmek için uygulamanın mevcut eşzamanlılık modelini kullanın: bir olay döngüsü, eşzamansız I/O veya bilinçli olarak seçilmiş başka bir tasarım. Önemli davranış, bir yöndeki ilerlemenin diğer yönde uydurulmuş bir mesaj sınırı gerektirmemesidir.
İki sınırlı bekleyen tampon tutun
İstemciden okunan veriler hedefe ulaşmayı hâlâ bekliyor olabilirken, hedeften gelen veriler istemciye ulaşmayı bekler. Bu bekleyen baytları ayrı ayrı izleyin.
Bir gönderme, istenenden daha az bayt yazabilir. Yazılmayan kısmı saklayın; onu atmayın veya tüm tamponu yeniden oynatmayın. Geçici olarak yazılamayan bir soket, doğru hazır olma olayını beklemek için bir nedendir, sürekli dönmek için değil.
Tamponları sınırlayın. Hedef yavaşsa, sınırsız istemci verisi okumaya devam etmek yalnızca kuyruğu aktarmanın belleğine taşır. Geri basınç, ilgili bekleyen tampon dolduğunda okumaları duraklatmak ve yazmalar yer açtığında devam etmek anlamına gelir.
Bir yöndeki sonlanma bir politika gerektirir
TCP, diğer yön hâlâ yararlı verilere sahipken bir gönderme yönünü kapatabilir. Tamponlanmış baytlar tükendikten sonra bu durumun nasıl yayılacağına karar verin ve düzenli kapanmayı bir hatadan veya son tarihten ayırın.
Bunların hiçbiri aktarmanın uygulamanın yükünü şifrelemesini veya ayrıştırmasını gerektirmez. Doğru akış işleme ihtiyaç duyar. Yalnızca tampon boyutunu artırmak, yanlış tarafı bekleyen veya her okumanın tek bir tam isteğe karşılık geldiğini varsayan bir aktarmayı onaramaz.