Go kontekstiga SOCKS ulanishini o'rnatishni bekor qilishga ruxsat bering
Go SOCKS yo'li uchun eksport qilingan ContextDialer interfeysidan foydalaning va ulanish bekor qilinishini keyingi dastur trafigining muddatlaridan ajratib turing.
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)
}Mavjud Go tarmoq paketi ichida context, errors, net, time va x/net/proxy importlaridan foydalaning. nil argumenti hech qanday SOCKS hisob ma'lumotlarini tanlamaydi. Ruxsat etilgan ommaviy proksi yo'lidagi ommaviy manzil uchun SOCKS5 proksi ro'yxati dialer-ning oxirgi nuqtasi uchun nomzodlarni taklif qiladi.
Eksport qilingan proxy.ContextDialer tasdiqi qo'llab-quvvatlanmaydigan amalga oshirishlarni aniq muvaffaqiyatsiz qiladi. Ichki dialer turini nomlash yoki chaqiruvchi boshqara olmaydigan bloklovchi goroutine ishga tushirish o'rniga joylashtirilgan bog'liqlikni tekshiring.
Kontekst ulanish o'rnatilishini boshqaradi. net.Conn qaytarilgandan so'ng tegishli o'qish/yozish yoki yuqori darajadagi so'rov muddatlarini qo'llang. Asosiy dialer ulanishining taym-auti va dasturning umumiy byudjeti turli chegaralardir.
HTTP transport integratsiyasi uchun uning oddiy TLS va HTTP xatti-harakatini saqlang. Qaytarilgan kontekstni tushunadigan SOCKS oqimi transportga topshirish, javob emas va keyingi barcha baytlar uchun umr siyosati emas.