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

In einem bestehenden Go-Netzwerkpaket verwenden Sie die Importe context, errors, net, time und x/net/proxy. Das nil-Argument wählt keine SOCKS-Anmeldedaten. Für ein öffentliches Ziel auf einer erlaubten öffentlichen Proxy-Route bietet die SOCKS5-Proxy-Liste Kandidaten für den Endpunkt des Dialers.

Die exportierte proxy.ContextDialer-Zusicherung lässt nicht unterstützte Implementierungen ausdrücklich fehlschlagen. Prüfen Sie die ausgelieferte Abhängigkeit, statt einen internen Dialer-Typ zu benennen oder eine blockierende Goroutine zu starten, die der Aufrufer nicht verwalten kann.

Der Kontext steuert den Verbindungsaufbau. Sobald eine net.Conn zurückgegeben wird, wenden Sie geeignete Lese-/Schreib- oder Anforderungs-Deadlines auf höherer Ebene an. Das Verbindungs-Timeout eines Basis-Dialers und das Gesamtbudget einer Anwendung sind unterschiedliche Grenzen.

Bei einer HTTP-Transport-Integration behalten Sie dessen normales TLS- und HTTP-Verhalten bei. Der zurückgegebene kontextbewusste SOCKS-Stream ist die Übergabe an den Transport, keine Antwort und keine Lebensdauerrichtlinie für alle späteren Bytes.

Ähnliche Artikel