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 ප්රොක්සි ලැයිස්තුව dialer හි අන්ත ලක්ෂ්යය සඳහා අපේක්ෂකයින් සපයයි.
නිර්යාත කළ proxy.ContextDialer ප්රකාශය සහාය නොදක්වන ක්රියාත්මක කිරීම් පැහැදිලිව අසාර්ථක කරයි. අභ්යන්තර dialer වර්ගය නම් කිරීම හෝ ඇමතුම්කරුට කළමනාකරණය කළ නොහැකි අවහිර කරන goroutine ආරම්භ කිරීම වෙනුවට යෙදවූ යැපීම පරීක්ෂා කරන්න.
සන්දර්භය සම්බන්ධතා ස්ථාපනය පාලනය කරයි. net.Conn ලබා දුන් පසු සුදුසු කියවීම්/ලිවීම් හෝ ඉහළ මට්ටමේ ඉල්ලීම් කාල සීමා යොදන්න. මූලික dialer හි සම්බන්ධතා කාල අවසානය සහ යෙදුමක මුළු අයවැය වෙනස් සීමා වේ.
HTTP ප්රවාහන ඒකාබද්ධ කිරීම සඳහා එහි සාමාන්ය TLS සහ HTTP හැසිරීම රඳවා ගන්න. ලබා දෙන සන්දර්භ-දැනුවත් SOCKS ප්රවාහය ප්රවාහනයට භාර දීමයි, ප්රතිචාරයක් නොවේ සහ පසුව එන සියලුම බයිට් සඳහා ජීවිත කාල ප්රතිපත්තියක් නොවේ.