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