La en Go-kontekst avbryte oppsettet av SOCKS-tilkoblingen
Bruk det eksporterte ContextDialer-grensesnittet for en Go-SOCKS-vei, og skill tilkoblingsavbrudd fra tidsfrister på senere applikasjonstrafikk.
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 en eksisterende Go-nettverkspakke bruker du importene context, errors, net, time og x/net/proxy. nil-argumentet velger ingen SOCKS-påloggingsinformasjon. For en offentlig destinasjon på en tillatt offentlig proxy-rute tilbyr SOCKS5-proxylisten kandidater for endepunktet til dialeren.
Den eksporterte proxy.ContextDialer-påstanden får ikke-støttede implementasjoner til å feile eksplisitt. Kontroller den utrullede avhengigheten i stedet for å navngi en intern dialer-type eller starte en blokkerende goroutine som den som kaller ikke kan administrere.
Konteksten styrer oppsettet av tilkoblingen. Når en net.Conn er returnert, bruk passende lese-/skrive- eller forespørselsfrister på høyere nivå. Tilkoblingstidsavbruddet til en basisdialer og det totale budsjettet til en applikasjon er forskjellige grenser.
For en HTTP-transportintegrasjon beholder du dens normale TLS- og HTTP-atferd. Den returnerte kontekstbevisste SOCKS-strømmen er overleveringen til transporten, ikke et svar eller en levetidspolicy for alle senere bytes.