Lat ein Go-kontekst avbryte oppsettet av SOCKS-tilkoplinga
Bruk det eksporterte ContextDialer-grensesnittet for ein Go-SOCKS-veg, og skil tilkoplingavbrot frå tidsfristar på seinare 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 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.