Нека Go контекст отказаже успостављање SOCKS везе
Користите извезени ContextDialer интерфејс за Go SOCKS путању и разликујте отказивање везе од рокова на каснијем саобраћају апликације.
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)
}Унутар постојећег Go мрежног пакета користите увозе context, errors, net, time и x/net/proxy. Аргумент nil не бира никакве SOCKS акредитиве. За јавно одредиште на дозвољеној рути јавног проксија листа SOCKS5 проксија нуди кандидате за крајњу тачку дијалера.
Извежена тврдња proxy.ContextDialer чини да неподржане имплементације експлицитно не успеју. Проверите распоређену зависност уместо да именујете интерни тип дијалера или покрећете блокирајућу goroutine којом позивалац не може да управља.
Контекст управља успостављањем везе. Када се net.Conn врати, примените одговарајуће рокове за читање/писање или рокове захтева вишег нивоа. Временско ограничење везе основног дијалера и укупан буџет апликације су различита ограничења.
За интеграцију HTTP транспорта задржите његово нормално TLS и HTTP понашање. Враћени SOCKS ток свестан контекста је предаја транспорту, а не одговор нити политика животног века за све касније бајтове.