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 પ્રવાહ ટ્રાન્સપોર્ટ હેન્ડઑફ છે, પ્રતિસાદ નથી કે પછીના બધા બાઇટ્સ માટે જીવનકાળ નીતિ નથી.

સંબંધિત લેખો