Ħalli context ta' Go jikkanċella t-twaqqif tal-konnessjoni SOCKS
Uża l-interface ContextDialer esportata għal mogħdija SOCKS f'Go u iddistingwi l-kanċellazzjoni tal-konnessjoni mid-deadlines fit-traffiku tal-applikazzjoni li jiġi wara.
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)
}Fi ħdan pakkett tan-netwerking Go eżistenti, uża l-imports context, errors, net, time u x/net/proxy. L-argument nil ma jagħżel l-ebda kredenzjali SOCKS. Għal destinazzjoni pubblika fuq rotta ta' proxy pubbliku permessa, il-lista tal-proxy SOCKS5 toffri kandidati għall-punt tat-tmiem tad-dialer.
L-asserzjoni proxy.ContextDialer esportata tħalli implementazzjonijiet mhux appoġġjati jonqsu b'mod espliċitu. Ivverifika d-dipendenza skjerata minflok ma ssemmi tip ta' dialer intern jew tibda goroutine li timblokka li s-sejjieħ ma jistax jimmaniġġa.
Il-context jirregola t-twaqqif tal-konnessjoni. Ladarba jiġi rritornat net.Conn, applika deadlines xierqa tal-qari/kitura jew deadlines tat-talba ta' livell ogħla. Il-timeout tal-konnessjoni tad-dialer bażiku u l-baġit totali ta' applikazzjoni huma limiti differenti.
Għal integrazzjoni tat-trasport HTTP, żomm l-imġiba normali tiegħu tat-TLS u l-HTTP. Il-fluss SOCKS konxju tal-context li jiġi rritornat huwa l-konsenja lit-trasport, mhux risposta u lanqas politika tal-ħajja għall-bajts kollha li jiġu wara.