اجعل سياق Go يلغي إعداد اتصال SOCKS
استخدم واجهة ContextDialer المصدَّرة لمسار SOCKS في Go، وميِّز إلغاء الاتصال عن المهل الزمنية على حركة التطبيق اللاحقة.
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 مرشحين لنقطة نهاية الـ dialer.
إن تأكيد proxy.ContextDialer المصدَّر يجعل التنفيذات غير المدعومة تفشل صراحة. تحقق من التبعية المنشورة بدل تسمية نوع dialer داخلي أو بدء goroutine حاجب لا يستطيع المستدعي إدارته.
السياق يحكم إنشاء الاتصال. بعد إرجاع net.Conn، طبّق مهل قراءة/كتابة مناسبة أو مهل طلب على مستوى أعلى. مهلة اتصال الـ dialer الأساسي والميزانية الكلية للتطبيق حدّان مختلفان.
لتكامل ناقل HTTP، احتفظ بسلوكه الطبيعي في TLS وHTTP. تدفق SOCKS العائد الواعي بالسياق هو تسليم الناقل، وليس استجابة ولا سياسة عمر لكل البايتات اللاحقة.