Թույլ տալ 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 հոսքը տրանսպորտին հանձնումն է, ոչ պատասխան և ոչ կյանքի տևողության քաղաքականություն բոլոր հետագա բայթերի համար։