Engedje a Go kontextusnak megszakítani a SOCKS-kapcsolat létrehozását
Használja az exportált ContextDialer interfészt egy Go SOCKS-útvonalhoz, és különböztesse meg a kapcsolat megszakítását a későbbi alkalmazásforgalom határidejétől.
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)
}Egy meglévő Go hálózati csomagon belül használja a context, errors, net, time és x/net/proxy importokat. A nil argumentum nem választ SOCKS-hitelesítő adatokat. Egy nyilvános célhoz engedélyezett nyilvános proxy-útvonalon a SOCKS5 proxy lista jelölteket kínál a dialer végpontjához.
Az exportált proxy.ContextDialer állítás miatt a nem támogatott implementációk egyértelműen meghiúsulnak. Ellenőrizze a telepített függőséget, ahelyett hogy belső dialer-típust nevezne meg, vagy olyan blokkoló goroutine-t indítana, amelyet a hívó nem tud kezelni.
A kontextus szabályozza a kapcsolat létrehozását. Miután a net.Conn visszatér, alkalmazzon megfelelő olvasási/írási vagy magasabb szintű kérési határidőket. Az alap dialer kapcsolati időtúllépése és egy alkalmazás teljes kerete különböző korlátok.
HTTP-transzport integrációja esetén őrizze meg a szokásos TLS- és HTTP-viselkedését. A visszaadott kontextustudatos SOCKS-adatfolyam a transzportnak történő átadás, nem válasz és nem élettartam-szabályzat minden későbbi bájtra.