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 स्ट्रिम यातायातमा हस्तान्तरण हो, प्रतिक्रिया होइन र पछिका सबै बाइटहरूका लागि जीवनकाल नीति होइन।

सम्बन्धित लेखहरू