Laat 'n Go-konteks SOCKS-verbindingsopstelling kanselleer
Gebruik die uitgevoerde ContextDialer-koppelvlak vir 'n Go-SOCKS-pad en onderskei verbindingskansellasie van spertye op latere toepassingsverkeer.
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)
}Binne 'n bestaande Go-netwerkpakket gebruik jy die invoere context, errors, net, time en x/net/proxy. Die nil-argument kies geen SOCKS-gewysigdes nie. Vir 'n openbare bestemming op 'n toegelate openbare-proxy-roete bied die SOCKS5-proxylys kandidate vir die dialer se eindpunt.
Die uitgevoerde proxy.ContextDialer-bewering laat onondersteunde implementerings eksplisiet misluk. Kontroleer die geïmplementeerde afhanklikheid eerder as om 'n interne dialer-tipe te noem of 'n blokkerende goroutine te begin wat die oproeper nie kan bestuur nie.
Die konteks beheer die verbindingsopstelling. Sodra 'n net.Conn teruggegee is, pas gepaste lees/skryf- of hoër-vlak versoekspertye toe. 'n Basis-dialer se verbindingstydperk en 'n toepassing se totale begroting is verskillende perke.
Vir 'n HTTP-transportintegrasie behou dit sy normale TLS- en HTTP-gedrag. Die teruggekeerde konteksbewuste SOCKS-stroom is die oordrag aan die transport, nie 'n antwoord of 'n leeftydbeleid vir alle latere grepe nie.