Go কনটেক্সটকে SOCKS সংযোগ স্থাপন বাতিল করতে দিন
Go SOCKS পথের জন্য এক্সপোর্ট করা ContextDialer ইন্টারফেস ব্যবহার করুন এবং সংযোগ বাতিলকে পরবর্তী অ্যাপ্লিকেশন ট্রাফিকের ডেডলাইন থেকে আলাদা করুন।
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)
}একটি বিদ্যমান Go নেটওয়ার্কিং প্যাকেজে context, errors, net, time এবং x/net/proxy ইমপোর্ট ব্যবহার করুন। nil আর্গুমেন্ট কোনো SOCKS ক্রেডেনশিয়াল বাছাই করে না। অনুমোদিত পাবলিক-প্রক্সি রুটে একটি পাবলিক গন্তব্যের জন্য SOCKS5 প্রক্সি তালিকা ডায়ালারের এন্ডপয়েন্টের জন্য প্রার্থী দেয়।
এক্সপোর্ট করা proxy.ContextDialer অ্যাসার্শন অসমর্থিত বাস্তবায়নকে স্পষ্টভাবে ব্যর্থ করে। অভ্যন্তরীণ ডায়ালার টাইপ নামকরণ বা কলার যে ব্লকিং গোরুটিন পরিচালনা করতে পারে না তা শুরু করার বদলে ডিপ্লয় করা ডিপেন্ডেন্সি যাচাই করুন।
কনটেক্সট সংযোগ স্থাপন নিয়ন্ত্রণ করে। net.Conn ফেরত দেওয়ার পর উপযুক্ত পড়া/লেখা বা উচ্চ-স্তরের রিকোয়েস্ট ডেডলাইন প্রয়োগ করুন। একটি বেস ডায়ালারের সংযোগ টাইমআউট এবং একটি অ্যাপ্লিকেশনের মোট বাজেট ভিন্ন সীমা।
HTTP ট্রান্সপোর্ট ইন্টিগ্রেশনের জন্য তার স্বাভাবিক TLS এবং HTTP আচরণ বজায় রাখুন। ফেরত দেওয়া কনটেক্সট-সচেতন SOCKS স্ট্রিম হলো ট্রান্সপোর্ট হ্যান্ডঅফ, কোনো প্রতিক্রিয়া নয় বা পরবর্তী সব বাইটের জন্য লাইফটাইম নীতি নয়।