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)
}

An engem bestehende Go-Netzwierkspaket benotzt Dir d'Importen context, errors, net, time an x/net/proxy. D'nil-Argument wielt keng SOCKS-Anmeldungsdonnéeën. Fir en ëffentlecht Zil op engem erlaabten ëffentleche Proxy-Wee bitt d'SOCKS5-Proxy-Lëscht Kandidaten fir den Endpunkt vum Dialer.

D'exportéiert proxy.ContextDialer-Assertioun léisst net-ënnerstëtzten Implementatiounen eksplizit feelen. Iwwerpréift d'deployéiert Ofhängegkeet, amplaz en internen Dialer-Typ ze nennen oder eng blockéierend Goroutine ze starten, déi den Uruffer net ka geréieren.

De Kontext regéiert den Opbau vun der Verbindung. Soubal eng net.Conn zréckginn ass, applizéiert passend Lese/Schreif- oder Ufro-Fristen op héijerem Niveau. Den Zäitlimit vun der Verbindung vun engem Basis-Dialer an d'Gesamtbudget vun enger Applikatioun si verschidde Grenzen.

Fir eng HTTP-Transportintegratioun behält seng normal TLS- an HTTP-Verhalen. Den zréckginnene kontextbewusste SOCKS-Stroum ass d'Iwwergab un den Transport, net eng Äntwert an och keng Liewensdauerpolitik fir all spéider Byten.

Ähnlech Artikelen