func dialViaSOCKS(ctx context.Context, destination string) (net.Conn, error) {
    dialer, err := proxy.SOCKS5(
        "tcp",
        "127.0.0.1:1080",
        nil,
        &net.Dialer{Timeout: 5 * time.Second},
    )
    if err != nil {
        return nil, err
    }
    contextDialer, ok := dialer.(proxy.ContextDialer)
    if !ok {
        return nil, errors.New("SOCKS dialer lacks context support")
    }
    return contextDialer.DialContext(ctx, "tcp", destination)
}

किसी मौजूदा Go नेटवर्किंग पैकेज में context, errors, net, time और x/net/proxy इम्पोर्ट का उपयोग करें। nil तर्क किसी SOCKS क्रेडेंशियल का चयन नहीं करता। स्वीकृत सार्वजनिक-प्रॉक्सी मार्ग पर सार्वजनिक गंतव्य के लिए SOCKS5 प्रॉक्सी सूची dialer के एंडपॉइंट के लिए उम्मीदवार देती है।

निर्यातित proxy.ContextDialer दावा असमर्थित कार्यान्वयनों को स्पष्ट रूप से विफल करता है। आंतरिक dialer प्रकार का नाम देने या ऐसा अवरोधक goroutine शुरू करने के बजाय जिसे कॉलर प्रबंधित नहीं कर सकता, तैनात निर्भरता की जाँच करें।

संदर्भ कनेक्शन स्थापना को नियंत्रित करता है। net.Conn लौटाए जाने के बाद उपयुक्त पढ़ने/लिखने या उच्च-स्तरीय अनुरोध समय-सीमाएँ लागू करें। आधार dialer का कनेक्शन टाइमआउट और किसी एप्लिकेशन का कुल बजट भिन्न सीमाएँ हैं।

HTTP ट्रांसपोर्ट एकीकरण के लिए उसका सामान्य TLS और HTTP व्यवहार बनाए रखें। लौटाया गया संदर्भ-जागरूक SOCKS स्ट्रीम ट्रांसपोर्ट हैंडऑफ़ है, प्रतिक्रिया नहीं और बाद के सभी बाइट्स के लिए जीवनकाल नीति नहीं।

संबंधित लेख