Lăsați un context Go să anuleze stabilirea conexiunii SOCKS
Folosiți interfața exportată ContextDialer pentru o cale SOCKS în Go și distingeți anularea conexiunii de termenele traficului ulterior al aplicației.
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)
}Într-un pachet de rețea Go existent, folosiți importurile context, errors, net, time și x/net/proxy. Argumentul nil nu selectează nicio acreditare SOCKS. Pentru o destinație publică pe o rută de proxy public permisă, lista de proxy SOCKS5 oferă candidați pentru punctul final al dialerului.
Aserțiunea exportată proxy.ContextDialer face ca implementările neacceptate să eșueze explicit. Verificați dependența implementată în loc să numiți un tip de dialer intern sau să porniți o goroutine blocantă pe care apelantul nu o poate gestiona.
Contextul guvernează stabilirea conexiunii. După ce un net.Conn este returnat, aplicați termene de citire/scriere adecvate sau termene de cerere de nivel superior. Timeout-ul de conexiune al unui dialer de bază și bugetul total al unei aplicații sunt limite diferite.
Pentru o integrare de transport HTTP, păstrați comportamentul normal TLS și HTTP. Fluxul SOCKS conștient de context returnat este predarea către transport, nu un răspuns și nici o politică de durată de viață pentru toți octeții ulteriori.