לאָזן אַ Go context אָפּרופן די SOCKS פֿאַרבינדונג־אויפֿשטעלונג
ניצט דעם עקספּאָרטירטן ContextDialer־אינטערפֿייס פֿאַר אַ Go SOCKS וועג און טיילט אָפּ פֿאַרבינדונג־אָפּרוף פֿון דעדליינס אויף שפּעטערדיקער אַפּליקאַציע־טראַפֿיק.
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 וואָס דער רופֿער קען נישט פֿירן.
דער context פֿירט די פֿאַרבינדונג־אויפֿשטעלונג. ווען אַ net.Conn ווערט צוריקגעגעבן, פּאַסט אָן פּאַסיקע לייען/שרייבן אָדער העכער־מדרגה בקשה־דעדליינס. דער פֿאַרבינדונג־צייטלימיט פֿון אַ באַזיס־dialer און דער גאַנצער בודזשעט פֿון אַן אַפּליקאַציע זענען פֿאַרשיידענע גרענעצן.
פֿאַר אַ HTTP־טראַנספּאָרט אינטעגראַציע האַלט אפּ זיין נאָרמאַל TLS און HTTP פֿאַרהאַלטן. דער צוריקגעגעבענער context־באַוווּסטער SOCKS־שטראָם איז די איבערגעבונג צום טראַנספּאָרט, נישט קיין ענטפֿער און נישט קיין לעבנסדויער־פּאָליטיק פֿאַר אַלע שפּעטערדיקע בייטן.