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

ਮੌਜੂਦਾ Go ਨੈੱਟਵਰਕਿੰਗ ਪੈਕੇਜ ਵਿੱਚ context, errors, net, time ਅਤੇ x/net/proxy ਇੰਪੋਰਟ ਵਰਤੋਂ। nil ਆਰਗਿਊਮੈਂਟ ਕੋਈ SOCKS ਪ੍ਰਮਾਣਿਕਤਾ ਨਹੀਂ ਚੁਣਦਾ। ਮਨਜ਼ੂਰਸ਼ੁਦਾ ਜਨਤਕ-ਪ੍ਰੌਕਸੀ ਮਾਰਗ ਉੱਤੇ ਜਨਤਕ ਮੰਜ਼ਿਲ ਲਈ SOCKS5 ਪ੍ਰੌਕਸੀ ਸੂਚੀ dialer ਦੇ ਐਂਡਪੌਇੰਟ ਲਈ ਉਮੀਦਵਾਰ ਦਿੰਦੀ ਹੈ।

ਨਿਰਯਾਤ ਕੀਤਾ proxy.ContextDialer ਦਾਅਵਾ ਅਣਸਮਰਥਿਤ ਲਾਗੂਕਰਨਾਂ ਨੂੰ ਸਪਸ਼ਟ ਰੂਪ ਵਿੱਚ ਅਸਫਲ ਕਰਦਾ ਹੈ। ਅੰਦਰੂਨੀ dialer ਕਿਸਮ ਦਾ ਨਾਮ ਦੇਣ ਜਾਂ ਕਾਲਰ ਵੱਲੋਂ ਸੰਭਾਲ ਨਾ ਸਕਣ ਵਾਲੀ ਬਲਾਕਿੰਗ goroutine ਸ਼ੁਰੂ ਕਰਨ ਦੀ ਥਾਂ ਤੈਨਾਤ ਨਿਰਭਰਤਾ ਦੀ ਜਾਂਚ ਕਰੋ।

ਸੰਦਰਭ ਕਨੈਕਸ਼ਨ ਸਥਾਪਨਾ ਨੂੰ ਨਿਯੰਤਰਿਤ ਕਰਦਾ ਹੈ। net.Conn ਵਾਪਸ ਆਉਣ ਤੋਂ ਬਾਅਦ ਢੁਕਵੀਆਂ ਪੜ੍ਹਨ/ਲਿਖਣ ਜਾਂ ਉੱਚ-ਪੱਧਰੀ ਬੇਨਤੀ ਸਮਾਂ-ਸੀਮਾਵਾਂ ਲਾਗੂ ਕਰੋ। ਅਧਾਰ dialer ਦਾ ਕਨੈਕਸ਼ਨ ਟਾਈਮਆਉਟ ਅਤੇ ਇੱਕ ਐਪਲੀਕੇਸ਼ਨ ਦਾ ਕੁੱਲ ਬਜਟ ਵੱਖਰੀਆਂ ਸੀਮਾਵਾਂ ਹਨ।

HTTP ਟ੍ਰਾਂਸਪੋਰਟ ਏਕੀਕਰਨ ਲਈ ਇਸਦਾ ਆਮ TLS ਅਤੇ HTTP ਵਿਵਹਾਰ ਬਣਾਈ ਰੱਖੋ। ਵਾਪਸ ਕੀਤਾ ਸੰਦਰਭ-ਜਾਗਰੂਕ SOCKS ਸਟ੍ਰੀਮ ਟ੍ਰਾਂਸਪੋਰਟ ਨੂੰ ਹੈਂਡਓਫ ਹੈ, ਜਵਾਬ ਨਹੀਂ ਅਤੇ ਬਾਅਦ ਦੇ ਸਾਰੇ ਬਾਈਟਾਂ ਲਈ ਜੀਵਨਕਾਲ ਨੀਤੀ ਨਹੀਂ।

ਸੰਬੰਧਿਤ ਲੇਖ