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

I ein eksisterande Go-nettverkspakke brukar du importa context, errors, net, time og x/net/proxy. nil-argumentet vel ingen SOCKS-påloggingsinformasjon. For ein offentleg destinasjon på ein tillaten offentleg proxy-rute tilbyr SOCKS5-proxylista kandidatar for endepunktet til dialeren.

Den eksporterte proxy.ContextDialer-påstanden får ikkje-støtta implementasjonar til å feile eksplisitt. Kontroller den utrulla avhengnaden i staden for å namngje ein intern dialer-type eller starte ein blokkerande goroutine som den som kallar ikkje kan styre.

Konteksten styrer oppsettet av tilkoplinga. Når ein net.Conn er returnert, bruk passande lese-/skrive- eller førespurnadsfristar på høgare nivå. Tilkoplingstidsavbrotet til ein basisdialer og det totale budsjettet til ein applikasjon er ulike grenser.

For ein HTTP-transportintegrasjon behald den normale TLS- og HTTP-åtferda. Den returnerte kontekstmedvetne SOCKS-straumen er overleveringa til transporten, ikkje eit svar eller ein levetidspolicy for alle seinare bytar.

Relaterte artiklar