Lat ein Go-kontekst avlýsa SOCKS-sambandsuppseting
Brúka ta útflutta ContextDialer-grænseflatan til eina Go-SOCKS-leið og skil sambandsavlýsing frá tíðarfrestrum á seinni applikatiónsumferð.
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 eitt verandi Go-netverkspakka, brúka innflutningarnar context, errors, net, time og x/net/proxy. nil-argumentið velur ongar SOCKS-viðurkenningar. Til ein offentligan málamynd á eini loyvdari almennari proxy-leið bjóðar SOCKS5 proxy-listin frambjóðarar til endapunktsins hjá dialerinums.
Ta útflutta proxy.ContextDialer staðfestingin fær óstuddar ísetingar at miseydnast beinleiðis. Kanna tann útlagda treytin heldur enn at nevna eina innari dialer-slag ella at byrja eina blokkerandi goroutine, sum kallarin ikki ræður yvir.
Kontekstið stýrir sambandsuppsetingini. Tá ið ein net.Conn er latin aftur, brúka hóskandi lesið/skrivað ella hægri-stigs-avbjóðingartíðarfrestrar. Sambandstíðarmarkið hjá einum grunddialer og samlaða fíggjarkarmurin hjá einari applikatión eru ymisk mørk.
Til eina HTTP-flutningsinnseting, varðveit ta vanliga TLS- og HTTP-atferðina. Ta afturlatna kontekstvitandi SOCKS-streymurin er handarin til flutningsins, ikki eitt svar og ikki ein lívstíðarregla fyri allar seinni bytur.