Bir Go bağlamının SOCKS bağlantı kurulumunu iptal etmesine izin verin
Go SOCKS yolu için dışa aktarılan ContextDialer arayüzünü kullanın ve bağlantı iptalini sonraki uygulama trafiğindeki son tarihlerden ayırın.
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)
}Mevcut bir Go ağ paketi içinde context, errors, net, time ve x/net/proxy içe aktarımlarını kullanın. nil bağımsız değişkeni hiçbir SOCKS kimlik bilgisi seçmez. İzin verilen bir genel proxy yolundaki genel hedef için SOCKS5 proxy listesi dialer'ın uç noktasına adaylar sunar.
Dışa aktarılan proxy.ContextDialer iddiası desteklenmeyen uygulamaların açıkça başarısız olmasını sağlar. Dahili bir dialer türünü adlandırmak veya çağıranın yönetemeyeceği engelleyici bir goroutine başlatmak yerine dağıtılan bağımlılığı kontrol edin.
Bağlam, bağlantının kurulmasını yönetir. Bir net.Conn döndürüldükten sonra uygun okuma/yazma veya üst düzey istek son tarihlerini uygulayın. Temel dialer'ın bağlantı zaman aşımı ile bir uygulamanın toplam bütçesi farklı sınırlardır.
HTTP taşıma entegrasyonu için normal TLS ve HTTP davranışını koruyun. Döndürülen bağlam farkındalıklı SOCKS akışı taşımaya devirdir; bir yanıt değil ve sonraki tüm baytlar için bir yaşam süresi politikası değildir.