Laat een Go-context de SOCKS-verbindingsopzet annuleren
Gebruik de geëxporteerde ContextDialer-interface voor een Go-SOCKS-pad en onderscheid verbindingsannulering van deadlines op later applicatieverkeer.
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)
}Gebruik binnen een bestaand Go-netwerkpakket de imports context, errors, net, time en x/net/proxy. Het nil-argument selecteert geen SOCKS-inloggegevens. Voor een openbare bestemming op een toegestane openbare proxy-route biedt de SOCKS5-proxylijst kandidaten voor het eindpunt van de dialer.
De geëxporteerde proxy.ContextDialer-bewering laat niet-ondersteunde implementaties expliciet mislukken. Controleer de uitgerolde afhankelijkheid in plaats van een intern dialertype te noemen of een blokkerende goroutine te starten die de aanroeper niet kan beheren.
De context bepaalt de verbindingsopzet. Zodra een net.Conn is teruggegeven, pas je passende lees-/schrijfdeadlines of deadlines voor verzoeken op hoger niveau toe. De verbindingstime-out van een basisdialer en het totale budget van een applicatie zijn verschillende grenzen.
Behoud voor een HTTP-transportintegratie het normale TLS- en HTTP-gedrag. De teruggegeven contextbewuste SOCKS-stream is de overdracht aan het transport, niet een antwoord of een levensduurbeleid voor alle latere bytes.