Leyfa Go-samhengi að hætta við uppsetningu SOCKS-tengingar
Notaðu útflutta ContextDialer-viðmótið fyrir Go-SOCKS-slóð og greindu tengingarafbókun frá tímafrestum á síðari notkunartrafík.
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)
}Innan núverandi Go-netkerfispakka skaltu nota innflutningana context, errors, net, time og x/net/proxy. nil-röksemdin velur engar SOCKS-auðkennisupplýsingar. Fyrir opinbert áfangastað á leyfðri opinberri proxy-slóð býður SOCKS5-proxylistinn upp á kandídatta fyrir endapunkt dialersins.
Útflutta proxy.ContextDialer fullyrðingin lætur óstuddar útfærslur mistakast á skýran hátt. Athugaðu uppsetta fylgnið í stað þess að nefna innra dialer-týpu eða ræsa blokkjandi goroutine sem kallandinn getur ekki stjórnað.
Samhengið stýrir tengingaruppsetningunni. Þegar net.Conn hefur verið skilað, beittu viðeigandi les-/skrif- eða beiðnifrestum á hærra stigi. Tengingartímamörk grunndialers og heildarfjárhagsáætlun forrits eru mismunandi mörk.
Fyrir HTTP-flutningssamþættingu skaltu varðveita eðlilega TLS- og HTTP-hegðun hans. Skilaða samhengisvita SOCKS-straumnum er afhendingin til flutningsins, ekki svar og ekki líftímastefna fyrir allar síðari bætur.