SOCKS रिले में पूर्ण द्विदिश प्रवाह और बैकप्रेशर
अनुमानित प्रतिक्रिया आकारों के बजाय स्वतंत्र बाइट प्रवाह, आंशिक I/O, सीमित बफ़र और बैकप्रेशर के आसपास रिले प्रवाह डिज़ाइन करें।
SOCKS हैंडशेक सफल रहा। अब रिले क्लाइंट से पढ़ता है, गंतव्य पर लिखता है, पूर्ण प्रतिक्रिया की प्रतीक्षा करता है और उसके बाद ही फिर क्लाइंट से पढ़ता है। यह क्रम एक पूरी तरह वैध एप्लिकेशन को डेडलॉक कर सकता है।
TCP सुरंग स्थापित होने के बाद SOCKS उसके भीतर के संदेशों को परिभाषित नहीं करता। गंतव्य पहले भेज सकता है। दोनों पक्ष स्वतंत्र रूप से भेज सकते हैं। एक पक्ष छोटा रिकॉर्ड भेजकर दूसरे के उत्तर की प्रतीक्षा कर सकता है।
बाइट भेजें, अनुमानित लेन-देन नहीं
प्राप्ति कॉल अपने फ़्लैग और सॉकेट स्थिति के अनुसार उपलब्ध बाइट लौटाता है। यह किसी सामान्य रिले को यह नहीं बताता कि एप्लिकेशन की प्रतिक्रिया पूर्ण है। किसी मनमाने बड़े बफ़र के भरने की प्रतीक्षा करने से वह छोटा संदेश भेजने में बाधा आ सकती है जिसकी साथी को आगे बढ़ने के लिए आवश्यकता है।
दोनों दिशाओं की सेवा के लिए एप्लिकेशन का मौजूदा समवर्ती मॉडल उपयोग करें: इवेंट लूप, अतुल्यकालिक I/O या जानबूझकर चुना गया कोई अन्य डिज़ाइन। महत्वपूर्ण व्यवहार यह है कि एक दिशा में प्रगति के लिए दूसरी दिशा में गढ़ी गई संदेश-सीमा की आवश्यकता न हो।
दो सीमित प्रतीक्षारत बफ़र रखें
क्लाइंट से पढ़ा गया डेटा अभी भी गंतव्य तक पहुँचने की प्रतीक्षा में हो सकता है, जबकि गंतव्य का डेटा क्लाइंट तक पहुँचने की प्रतीक्षा में है। उन प्रतीक्षारत बाइटों को अलग-अलग ट्रैक करें।
एक भेजने की क्रिया माँगे गए से कम बाइट लिख सकती है। न लिखा गया भाग रखें; उसे न फेंकें और न पूरा बफ़र दोबारा चलाएँ। अस्थायी रूप से लिखने योग्य न होना सही तैयारी-घटना की प्रतीक्षा करने का कारण है, लगातार घूमते रहने का नहीं।
बफ़रों को सीमित करें। यदि गंतव्य धीमा है, तो असीमित क्लाइंट डेटा पढ़ते रहना केवल कतार को रिले की स्मृति में ले जाता है। बैकप्रेशर का अर्थ है संबंधित प्रतीक्षारत बफ़र भर जाने पर पढ़ना रोकना और लेखन से स्थान बनने पर फिर शुरू करना।
एक दिशा में अंत के लिए नीति आवश्यक है
TCP भेजने की दिशा बंद कर सकता है जबकि दूसरी दिशा में अभी भी उपयोगी डेटा हो। बफ़र किए गए बाइट खाली होने के बाद उस स्थिति को कैसे प्रसारित करना है यह तय करें, और व्यवस्थित बंदी को त्रुटि या समय-सीमा से अलग पहचानें।
इनमें से कुछ भी रिले से एप्लिकेशन का पेलोड डिक्रिप्ट या पार्स करने को नहीं कहता। इसे सही स्ट्रीम प्रबंधन चाहिए। केवल बफ़र का आकार बढ़ाना गलत पक्ष की प्रतीक्षा करने वाले या हर पढ़ाई को एक पूरी प्रार्थना मानने वाले रिले को ठीक नहीं कर सकता।