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.

Skyldar greinar