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)
}

Nínú àpò nẹ́tíwọ́kì Go tí ó wà tẹ́lẹ̀, lo àwọn àkóónú context, errors, net, time àti x/net/proxy. Àríyànjiyàn nil kò yan ẹ̀rí SOCKS kankan. Fún ibi àfojúsùn gbogbogbò lórí ọ̀nà aṣojú gbogbogbò tí a gbà láyè, àkójọ aṣojú SOCKS5 ń pèsè àwọn olùdíje fún ìparí dialer.

Ìjẹ́rìí proxy.ContextDialer tí a kó jáde mú kí àwọn ìmúṣẹ tí kò ní àtìlẹ́yìn kùnà ní gbangba. Ṣàyẹ̀wò ìgbẹ́kẹ̀lé tí a ti fi sórí ẹ̀rọ dípò dárúkọ irú dialer inú tàbí bẹ̀rẹ̀ goroutine tí ń dí tí olùpè kò lè ṣàkóso.

Àyíká ń ṣàkóso ìdásílẹ̀ ìsopọ̀. Lẹ́yìn tí a bá dá net.Conn padà, lo àwọn àkókò ìparí kíkà/kíkọ tó yẹ tàbí àwọn àkókò ìparí ìbéèrè ìpele gíga. Àkókò ìsopọ̀ dialer ìpìlẹ̀ àti ìsúnáwọ́n àpapọ̀ ohun èlò jẹ́ ààlà ọ̀tọ̀ọ̀tọ̀.

Fún ìsopọ̀ ìgbékalẹ̀ HTTP, pa ìhùwàsí TLS àti HTTP deede rẹ̀ mọ́. Ìṣàn SOCKS tí ó mọ̀ àyíká tí a dá padà ni ìfọwọ́sí sí ìgbékalẹ̀, kì í ṣe ìdáhùn àti kì í ṣe ìlànà ìgbésí ayé fún gbogbo báìtì tó tẹ̀le.

Àwọn àpilẹ̀kọ tó jọra