Leisti Go kontekstui atšaukti SOCKS ryšio nustatymą
Naudokite eksportuotą ContextDialer sąsają Go SOCKS keliui ir atskirkite ryšio atšaukimą nuo vėlesnio programos srauto terminų.
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)
}Esamame Go tinklo pakete naudokite importus context, errors, net, time ir x/net/proxy. nil argumentas nepasirenka jokių SOCKS prisijungimo duomenų. Viešai paskirties vietai leistiname viešojo proxy maršrute SOCKS5 proxy sąrašas siūlo kandidatus dialerio galiniam taškui.
Eksportuotas proxy.ContextDialer teiginys priverčia nepalaikomas implementacijas aiškiai nepavykti. Patikrinkite įdiegtą priklausomybę, o ne įvardykite vidinį dialerio tipą arba paleiskite blokuojantį goroutine, kurio kvietėjas negali valdyti.
Kontekstas valdo ryšio nustatymą. Kai net.Conn grąžinamas, taikykite tinkamus skaitymo/rašymo arba aukštesnio lygio užklausos terminus. Pagrindinio dialerio ryšio skirtasis laikas ir bendras programos biudžetas yra skirtingos ribos.
HTTP transporto integracijai išlaikykite įprastą TLS ir HTTP elgseną. Grąžintas kontekstą suprantantis SOCKS srautas yra perdavimas transportui, o ne atsakymas ir ne visų vėlesnių baitų gyvavimo trukmės politika.