Nechte kontext Go zrušit navazování SOCKS spojení
Použijte exportované rozhraní ContextDialer pro cestu SOCKS v Go a odlište zrušení spojení od termínů pozdějšího provozu aplikace.
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)
}V existujícím síťovém balíčku Go použijte importy context, errors, net, time a x/net/proxy. Argument nil nevolí žádné přihlašovací údaje SOCKS. Pro veřejné cílové umístění na povolené trase veřejné proxy nabízí seznam proxy SOCKS5 kandidáty pro koncový bod dialeru.
Exportovaný test proxy.ContextDialer způsobuje, že nepodporované implementace explicitně selžou. Ověřte nasazenou závislost, místo abyste pojmenovali interní typ dialeru nebo spouštěli blokující gorutinu, kterou volající nemůže řídit.
Kontext řídí navázání spojení. Jakmile je vrácen net.Conn, použijte vhodné termíny pro čtení/zápis nebo termíny požadavků vyšší úrovně. Časový limit spojení základního dialeru a celkový rozpočet aplikace jsou různé limity.
Pro integraci s přenosem HTTP zachovejte jeho běžné chování TLS a HTTP. Vrácený proud SOCKS respektující kontext je předání přenosu, nikoli odpověď ani zásada životnosti pro všechny další bajty.