Nechajte kontext Go zrušiť nadviazanie SOCKS spojenia
Použite exportované rozhranie ContextDialer pre cestu SOCKS v Go a odlíšte zrušenie spojenia od termínov neskoršej prevádzky aplikácie.
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úcom sieťovom balíku Go použite importy context, errors, net, time a x/net/proxy. Argument nil nevyberá žiadne prihlasovacie údaje SOCKS. Pre verejný cieľ na povolenej trase verejnej proxy ponúka zoznam proxy SOCKS5 kandidátov pre koncový bod dialera.
Exportované tvrdenie proxy.ContextDialer spôsobí, že nepodporované implementácie explicitne zlyhajú. Overte nasadenú závislosť namiesto pomenovania interného typu dialera alebo spustenia blokujúcej gorutiny, ktorú volajúci nedokáže spravovať.
Kontext riadi nadviazanie spojenia. Po vrátení net.Conn použite vhodné termíny čítania/zápisu alebo termíny požiadaviek vyššej úrovne. Časový limit spojenia základného dialera a celkový rozpočet aplikácie sú rôzne limity.
Pri integrácii s transportom HTTP zachovajte jeho bežné správanie TLS a HTTP. Vrátený tok SOCKS rešpektujúci kontext je odovzdaním transportu, nie odpoveď ani zásada životnosti pre všetky ďalšie bajty.