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 സ്ട്രീം ട്രാൻസ്പോർട്ടിലേക്കുള്ള കൈമാറ്റമാണ്, പ്രതികരണമല്ല, തുടർന്നുള്ള എല്ലാ ബൈറ്റുകൾക്കുമുള്ള ആയുസ്സ് നയവുമല്ല.

അനുബന്ധ ലേഖനങ്ങൾ