ਪ੍ਰੌਕਸੀ ਜਾਂਚਕਰਤਾ SendTimeout = 200 ਸੈੱਟ ਕਰਦਾ ਹੈ, Connect ਕਾਲ ਕਰਦਾ ਹੈ ਅਤੇ ਉਮੀਦ ਨਾਲੋਂ ਕਿਤੇ ਵੱਧ ਉਡੀਕ ਕਰਦਾ ਹੈ। ਟਾਈਮਆਊਟ ਉਸ ਕਾਰਵਾਈ ਨਾਲ ਬੱਝਾ ਹੈ ਜਿੱਥੇ ਜਾਂਚਕਰਤਾ ਅਜੇ ਪਹੁੰਚਿਆ ਨਹੀਂ।

Socket.SendTimeout ਸਿੰਕ੍ਰੋਨਸ ਭੇਜਣ ਨੂੰ ਨਿਯੰਤਰਿਤ ਕਰਦਾ ਹੈ। ਇਹ ਸਿੰਕ੍ਰੋਨਸ ਕਨੈਕਸ਼ਨ ਕੋਸ਼ਿਸ਼ ਨੂੰ 200 ms ਦੀ ਸਮਾਂ-ਸੀਮਾ ਨਹੀਂ ਦਿੰਦਾ। Connect ਤੋਂ ਪਹਿਲਾਂ ਨੀਂਦ ਜੋੜਨਾ ਸਿਰਫ਼ ਇੱਕ ਹੋਰ ਦੇਰੀ ਜੋੜਦਾ ਹੈ।

ਉਡੀਕ ਕਰ ਰਹੀ ਕਾਰਵਾਈ ਰੱਦ ਕਰੋ

ਰੱਦ ਕਰਨ ਯੋਗ overload ਦੇਣ ਵਾਲੇ ਆਧੁਨਿਕ .NET ਟਾਰਗੈਟ 'ਤੇ, async ਜਾਂਚ ਆਪਣਾ ਬਜਟ ਕਨੈਕਸ਼ਨ ਸਥਾਪਤ ਕਰਨ 'ਤੇ ਲਗਾ ਸਕਦੀ ਹੈ:

using var budget = new CancellationTokenSource(TimeSpan.FromSeconds(2));
using var client = new TcpClient();
await client.ConnectAsync(proxyHost, proxyPort, budget.Token);

ਇਹ ਟੁਕੜਾ async ਢੰਗ ਵਿੱਚ ਹੁੰਦਾ ਹੈ, ਪ੍ਰੌਕਸੀ ਹੋਸਟ ਅਤੇ ਪੋਰਟ ਕਾਲ ਕਰਨ ਵਾਲਾ ਦਿੰਦਾ ਹੈ; ਪ੍ਰੌਕਸੀ ਸੂਚੀ ਤੋਂ ਕੋਈ ਜਨਤਕ ਉਮੀਦਵਾਰ ਉਹ ਦੋ ਇਨਪੁਟ ਦੇ ਸਕਦਾ ਹੈ। ਜੇ ਜਾਂਚਕਰਤਾ ਅਸਫਲਤਾ ਦੇ ਕਾਰਨ ਦੱਸਦਾ ਹੈ ਤਾਂ ਰੱਦ ਕਰਨ ਨੂੰ socket ਗਲਤੀ ਤੋਂ ਵੱਖ ਸੰਭਾਲੋ। ਕਲਾਇੰਟ dispose ਕਰਨਾ ਪੂਰੀਆਂ ਹੋਈਆਂ ਜਾਂਚਾਂ ਨੂੰ socket ਇਕੱਠੇ ਕਰਨ ਤੋਂ ਵੀ ਰੋਕਦਾ ਹੈ।

ਪੁਰਾਣੇ .NET Framework ਕੋਡ ਵਿੱਚ ਹਰ ਆਧੁਨਿਕ overload ਨਹੀਂ ਹੁੰਦਾ। ਸਮਰਥਿਤ async ਕਨੈਕਸ਼ਨ ਪ੍ਰਬੰਧ ਵਰਤੋ ਅਤੇ ਕੋਸ਼ਿਸ਼ ਛੱਡਣ ਵੇਲੇ socket ਸਪਸ਼ਟ ਤੌਰ 'ਤੇ ਬੰਦ ਕਰੋ। ਸਿਰਫ਼ ਆਪਣੀ ਉਡੀਕ ਰੋਕਣਾ ਇਹ ਸਾਬਤ ਨਹੀਂ ਕਰਦਾ ਕਿ ਹੇਠਲੀ ਕਾਰਵਾਈ ਰੁਕ ਗਈ ਹੈ।

ਹਰਾ ਨਤੀਜਾ ਅਜੇ ਵੀ ਛੋਟਾ ਨਤੀਜਾ ਹੈ

ਸਫਲ TCP ਕਨੈਕਸ਼ਨ ਸਾਬਤ ਕਰਦਾ ਹੈ ਕਿ ਇਹ ਕਲਾਇੰਟ ਸੁਣ ਰਹੇ ਅੰਤ ਬਿੰਦੂ ਤੱਕ ਪਹੁੰਚਿਆ ਹੈ। ਇਸਨੇ SOCKS ਗੱਲਬਾਤ ਨਹੀਂ ਕੀਤੀ, HTTP ਪ੍ਰੌਕਸੀ 'ਤੇ ਪ੍ਰਮਾਣਿਤ ਨਹੀਂ ਹੋਇਆ, CONNECT ਨਹੀਂ ਖੋਲ੍ਹਿਆ ਅਤੇ ਨਾ ਹੀ ਲੋੜੀਂਦਾ ਵੈੱਬਸਾਈਟ ਜਵਾਬ ਪ੍ਰਾਪਤ ਕੀਤਾ।

ਉਹਨਾਂ ਬਾਅਦ ਦੇ ਪੜਾਵਾਂ ਨੂੰ ਉਹਨਾਂ ਦਾ ਆਪਣਾ ਸੀਮਿਤ ਪ੍ਰਬੰਧਨ ਦਿਓ, ਜਾਂ ਉਹਨਾਂ ਰਾਹੀਂ ਜਾਣ-ਬੁੱਝ ਕੇ ਕੁੱਲ ਸਮਾਂ-ਸੀਮਾ ਲੰਘਾਓ। ਨਹੀਂ ਤਾਂ ਮੁਰੰਮਤ ਕੀਤਾ ਕਨੈਕਸ਼ਨ ਟਾਈਮਰ ਪੂਰੀ ਤਰ੍ਹਾਂ ਕੰਮ ਕਰ ਸਕਦਾ ਹੈ ਜਦੋਂ ਕਿ ਜਾਂਚਕਰਤਾ ਪ੍ਰੌਕਸੀ handshake ਦੀ ਉਡੀਕ ਵਿੱਚ ਇੱਕ ਹੋਰ ਮਿੰਟ ਲੰਘਾਉਂਦਾ ਹੈ।

ਸੰਬੰਧਿਤ ਲੇਖ