Socket.SendTimeout ಪ್ರಾಕ್ಸಿ ಸಂಪರ್ಕ ಪ್ರಯತ್ನವನ್ನು ಮಿತಿಗೊಳಿಸುವುದಿಲ್ಲ
ಕೇವಲ ಡೇಟಾ ಕಳುಹಿಸಲು ಅನ್ವಯವಾಗುವ ಟೈಮ್ಔಟ್ ಸೆಟ್ ಮಾಡುವ ಬದಲು ಸಂಪರ್ಕ ಸ್ಥಾಪನೆಯಲ್ಲಿ ಪ್ರಾಕ್ಸಿ ಪೋರ್ಟ್ ಪರೀಕ್ಷೆಯನ್ನು ಮಿತಿಗೊಳಿಸಿ.
ಪ್ರಾಕ್ಸಿ ಪರಿಶೀಲಕವು 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ಗಾಗಿ ಇನ್ನೊಂದು ನಿಮಿಷ ಕಳೆಯುತ್ತದೆ.