Anna Go-kontekstin peruuttaa SOCKS-yhteyden muodostus
Käytä vietyä ContextDialer-rajapintaa Go-SOCKS-polulla ja erota yhteyden peruutus myöhemmän sovellusliikenteen määräajoista.
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)
}Olemassa olevassa Go-verkkopaketissa käytä tuonteja context, errors, net, time ja x/net/proxy. nil-argumentti ei valitse SOCKS-tunnistetietoja. Julkiselle kohteelle sallitulla julkisen välityspalvelimen reitillä SOCKS5-välityspalvelinluettelo tarjoaa ehdokkaita dialerin päätepisteeksi.
Viety proxy.ContextDialer-väite saa tukemattomat toteutukset epäonnistumaan selkeästi. Tarkista käyttöön otettu riippuvuus sen sijaan, että nimeäisit sisäisen dialer-tyypin tai käynnistäisit estävän goroutinen, jota kutsuja ei voi hallita.
Konteksti ohjaa yhteyden muodostusta. Kun net.Conn on palautettu, sovella asianmukaisia luku-/kirjoitus- tai korkeamman tason pyyntömääräaikoja. Perusdialerin yhteysaikakatkaisu ja sovelluksen kokonaisbudjetti ovat eri rajoja.
HTTP-siirtoyhteyden integroinnissa säilytä sen tavallinen TLS- ja HTTP-käyttäytyminen. Palautettu kontekstitietoinen SOCKS-virta on siirto siirtokerrokselle, ei vastaus eikä kaikkien myöhempien tavujen elinkaaripolitiikka.