Pustite, da Go kontekst prekliče vzpostavitev povezave SOCKS
Uporabite izvoženi vmesnik ContextDialer za pot SOCKS v Go in ločite preklic povezave od rokov poznejšega prometa aplikacije.
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 obstoječem Go omrežnem paketu uporabite uvoze context, errors, net, time in x/net/proxy. Argument nil ne izbere nobenih poverilnic SOCKS. Za javni cilj na dovoljeni poti javnega posrednika seznam posrednikov SOCKS5 ponuja kandidate za končno točko dialerja.
Izvožena trditev proxy.ContextDialer povzroči, da nepodprte implementacije izrecno odpovejo. Preverite nameščeno odvisnost, namesto da bi poimenovali notranji tip dialerja ali zagnali blokirajočo goroutine, ki je klicatelj ne more upravljati.
Kontekst upravlja vzpostavitev povezave. Ko je net.Conn vrnjen, uporabite ustrezne roke za branje/pisanje ali roke zahteve na višji ravni. Časovna omejitev povezave osnovnega dialerja in skupni proračun aplikacije sta različni meji.
Za integracijo s prometom HTTP ohranite njegovo običajno vedenje TLS in HTTP. Vrnjeni tok SOCKS, ki se zaveda konteksta, je predaja prometu, ne odgovor in ne politika življenjske dobe za vse poznejše bajte.