Deixa que un context de Go cancel·li l'establiment de la connexió SOCKS
Utilitza la interfície exportada ContextDialer per a un camí SOCKS de Go i distingeix la cancel·lació de la connexió dels terminis del trànsit posterior de l'aplicació.
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)
}Dins d'un paquet de xarxa de Go existent, utilitza les importacions context, errors, net, time i x/net/proxy. L'argument nil no selecciona cap credencial SOCKS. Per a una destinació pública en una ruta de proxy públic permesa, la llista de proxys SOCKS5 ofereix candidats per al punt final del dialer.
L'asserció exportada proxy.ContextDialer fa que les implementacions no suportades fallin explícitament. Comprova la dependència desplegada en lloc d'anomenar un tipus de dialer intern o d'iniciar una goroutine bloquejant que el cridador no pugui gestionar.
El context governa l'establiment de la connexió. Un cop retornat un net.Conn, aplica terminis de lectura/escriptura adequats o terminis de petició de nivell superior. El temps d'espera de connexió del dialer base i el pressupost total d'una aplicació són límits diferents.
Per a una integració de transport HTTP, conserva el seu comportament normal de TLS i HTTP. El flux SOCKS retornat, conscient del context, és el lliurament al transport, no una resposta ni una política de vida útil per a tots els bytes posteriors.