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 స్ట్రీమ్ రవాణాకు అప్పగింపు, ప్రతిస్పందన కాదు మరియు తదుపరి అన్ని బైట్లకు జీవితకాల విధానం కాదు.