Lit in Go-kontekst de SOCKS-ferbining opset annulearje
Brûk de eksportearre ContextDialer-ynterface foar in Go-SOCKS-paad en ûnderskied ferbiningsannulaasje fan deadlines op lettere applikaasjeferkear.
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)
}Binnen in besteand Go-netwurkpakket brûke jo de ymporten context, errors, net, time en x/net/proxy. It nil-argumint kiest gjin SOCKS-oanmeldgegevens. Foar in iepenbiere bestimming op in tastiene iepenbiere proxy-rûte biedt de SOCKS5-proxylist kandidaten foar it einpunt fan de dialer.
De eksportearre proxy.ContextDialer-bewearing lit net-stipe ymplemintaasjes eksplisyt misbeteare. Kontrolearje de útrôle ôfhinklikens ynstee fan in ynterne dialer-type te neamen of in blokkearjende goroutine te starten dy't de oanropper net beheare kin.
It kontekst regelet de ferbiningopsetsetting. As ienris in net.Conn weromjûn is, pas dan passende lês-/skriuw- of oanfraachdeadlines op heger nivo ta. De ferbiningstimeout fan in basisdialer en it totale budzjet fan in applikaasje binne ferskillende grinzen.
Foar in HTTP-transportintegrated behâldt it normale TLS- en HTTP-gedrach. De weromjûne kontekstbewuste SOCKS-stream is de oerdracht oan it transport, net in antwurd of in libbensdoerbelied foar alle lettere bytes.