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

Gebruik binnen een bestaand Go-netwerkpakket de imports context, errors, net, time en x/net/proxy. Het nil-argument selecteert geen SOCKS-inloggegevens. Voor een openbare bestemming op een toegestane openbare proxy-route biedt de SOCKS5-proxylijst kandidaten voor het eindpunt van de dialer.

De geëxporteerde proxy.ContextDialer-bewering laat niet-ondersteunde implementaties expliciet mislukken. Controleer de uitgerolde afhankelijkheid in plaats van een intern dialertype te noemen of een blokkerende goroutine te starten die de aanroeper niet kan beheren.

De context bepaalt de verbindingsopzet. Zodra een net.Conn is teruggegeven, pas je passende lees-/schrijfdeadlines of deadlines voor verzoeken op hoger niveau toe. De verbindingstime-out van een basisdialer en het totale budget van een applicatie zijn verschillende grenzen.

Behoud voor een HTTP-transportintegratie het normale TLS- en HTTP-gedrag. De teruggegeven contextbewuste SOCKS-stream is de overdracht aan het transport, niet een antwoord of een levensduurbeleid voor alle latere bytes.

Gerelateerde artikelen