Lad en Go-kontekst annullere oprettelsen af SOCKS-forbindelsen
Brug det eksporterede ContextDialer-interface til en Go-SOCKS-vej, og skelne forbindelsesannullering fra deadlines på senere applikationstrafik.
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-netværkspakke skal du bruge importerne context, errors, net, time og x/net/proxy. nil-argumentet vælger ingen SOCKS-legitimationsoplysninger. Til en offentlig destination på en tilladt offentlig proxy-rute tilbyder SOCKS5-proxylisten kandidater til dialerens endepunkt.
Det eksporterede proxy.ContextDialer-assert får ikke-understøttede implementeringer til at fejle eksplicit. Kontroller den udrullede afhængighed i stedet for at navngive en intern dialer-type eller starte en blokerende goroutine, som kalderen ikke kan styre.
Konteksten styrer forbindelsesoprettelsen. Når en net.Conn er returneret, skal du anvende passende læse/skrive- eller anmodningsdeadlines på højere niveau. En basisdialers forbindelsestimeout og en applikations samlede budget er forskellige grænser.
For en HTTP-transportintegration skal du bevare dens normale TLS- og HTTP-adfærd. Den returnerede kontekstbevidste SOCKS-strøm er transportoverdragelsen, ikke et svar eller en levetidspolitik for alle senere bytes.