Deixa que un contexto de Go cancele o establecemento da conexión SOCKS
Usa a interface exportada ContextDialer para unha ruta SOCKS de Go e distingue a cancelación da conexión dos prazos do tráfico posterior da aplicación.
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)
}Dentro dun paquete de rede de Go existente, usa as importacións context, errors, net, time e x/net/proxy. O argumento nil non selecciona credenciais SOCKS. Para un destino público nunha ruta de proxy público permitida, a lista de proxies SOCKS5 ofrece candidatos para o extremo do dialer.
A aserción exportada proxy.ContextDialer fai que as implementacións non compatibles fallen de forma explícita. Comproba a dependencia despregada en lugar de nomear un tipo de dialer interno ou iniciar unha goroutine bloqueante que o chamador non poida xestionar.
O contexto goberna o establecemento da conexión. Unha vez devolto un net.Conn, aplica prazos de lectura/escritura axeitados ou prazos de solicitude de nivel superior. O tempo de espera de conexión do dialer base e o orzamento total dunha aplicación son límites distintos.
Para unha integración de transporte HTTP, conserva o seu comportamento normal de TLS e HTTP. O fluxo SOCKS consciente do contexto que se devolve é a entrega ao transporte, non unha resposta nin unha política de vida útil para todos os bytes posteriores.