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)
}

Ndani ya kifurushi cha mtandao cha Go kilichopo, tumia uingizaji wa context, errors, net, time na x/net/proxy. Hoja ya nil haichagui hati yoyote ya SOCKS. Kwa lengo la umma kwenye njia ya proksi ya umma inayoruhusiwa, orodha ya proksi za SOCKS5 inatoa watahiniwa kwa sehemu ya mwisho ya dialer.

Dai la proxy.ContextDialer lililosafirishwa hufanya utekelezaji usiotumika ushindwe waziwazi. Kagua utegemezi uliosambazwa badala ya kutaja aina ya dialer ya ndani au kuanzisha goroutine inayozuia ambayo mpigaji simu hawezi kuisimamia.

Muktadha husimamia usanidi wa muunganisho. Baada ya net.Conn kurejeshwa, tumia makataa yanayofaa ya kusoma/kuandika au makataa ya ombi la kiwango cha juu. Muda wa muunganisho wa dialer msingi na bajeti jumla ya programu ni mipaka tofauti.

Kwa ujumuishaji wa usafirishaji wa HTTP, hifadhi tabia yake ya kawaida ya TLS na HTTP. Mtiririko wa SOCKS unaofahamu muktadha unaorejeshwa ni makabidhiano kwa usafirishaji, si jibu na si sera ya maisha kwa baiti zote zinazofuata.

Makala zinazohusiana