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

Mövcud Go şəbəkə paketi daxilində context, errors, net, time və x/net/proxy idxallarından istifadə edin. nil arqumenti heç bir SOCKS etimadnaməsi seçmir. İcazə verilmiş ictimai-proksi marşrutu üzrə ictimai təyinat üçün SOCKS5 proksi siyahısı dialer-in son nöqtəsi üçün namizədlər təklif edir.

İxrac edilmiş proxy.ContextDialer təsdiqi dəstəklənməyən tətbiqlərin açıq şəkildə uğursuz olmasına səbəb olur. Daxili dialer tipini adlandırmaq və ya çağıranın idarə edə bilmədiyi bloklayan goroutine başlatmaq əvəzinə yerləşdirilmiş asılılığı yoxlayın.

Kontekst bağlantının qurulmasını idarə edir. net.Conn qaytarıldıqdan sonra müvafiq oxuma/yazma və ya daha yüksək səviyyəli sorğu son tarixləri tətbiq edin. Baza dialer-in bağlantı taym-autu və tətbiqin ümumi büdcəsi fərqli limitlərdir.

HTTP nəqliyyat inteqrasiyası üçün onun normal TLS və HTTP davranışını saxlayın. Qaytarılan kontekstdən xəbərdar SOCKS axını nəqliyyatın təhvilidir, cavab deyil və sonrakı bütün baytlar üçün ömür siyasəti deyil.

Əlaqəli məqalələr