Ļaut Go kontekstam atcelt SOCKS savienojuma izveidi
Izmantojiet eksportēto ContextDialer saskarni Go SOCKS ceļam un atšķiriet savienojuma atcelšanu no vēlākas lietojumprogrammas trafika termiņiem.
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)
}Esošā Go tīklošanas pakotnē izmantojiet importus context, errors, net, time un x/net/proxy. nil arguments neizvēlas nevienus SOCKS akreditācijas datus. Publiskam galamērķim atļautā publiskā starpniekservera maršrutā SOCKS5 starpniekserveru saraksts piedāvā kandidātus dialera galapunktam.
Eksportētais proxy.ContextDialer apgalvojums liek neatbalstītām implementācijām nepārprotami neizdoties. Pārbaudiet izvietoto atkarību, nevis nosaucot iekšēju dialera tipu vai sākot bloķējošu goroutine, ko zvanītājs nevar pārvaldīt.
Konteksts pārvalda savienojuma izveidi. Kad net.Conn ir atgriezts, piemērojiet atbilstošus lasīšanas/rakstīšanas vai augstāka līmeņa pieprasījuma termiņus. Pamata dialera savienojuma taimauts un lietojumprogrammas kopējais budžets ir dažādas robežas.
HTTP transporta integrācijai saglabājiet tā parasto TLS un HTTP uzvedību. Atgrieztā kontekstu apzinātā SOCKS plūsma ir nodošana transportam, nevis atbilde un nevis visu turpmāko baitu dzīves ilguma politika.