የ Go አውድ 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 ከመጀመር ይልቅ የተሰማራውን ጥገኝነት ያረጋግጡ።
አውዱ የግንኙነት መጀመርን ይቆጣጠራል። net.Conn ከተመለሰ በኋላ ተገቢውን የንባብ/መጻፍ ወይም ከፍተኛ-ደረጃ የጥያቄ ጊዜ ገደቦችን ይተግብሩ። የመሠረት dialer የግንኙነት ጊዜ ገደብ እና የመተግበሪያው ጠቅላላ በጀት የተለያዩ ገደቦች ናቸው።
ለ HTTP ትራንስፖርት ውህደት መደበኛውን TLS እና HTTP ባህሪውን ይጠብቁ። የተመለሰው አውድ-አዋቂ የ SOCKS ዥረት የትራንስፖርት ርክክብ ነው፣ ምላሽ ወይም ለሁሉም በኋላ ባይት የህይወት ጊዜ ፖሊሲ አይደለም።