កម្មវិធីពិនិត្យប្រូកស៊ីកំណត់ SendTimeout = 200 ហៅ Connect ហើយរង់ចាំយូរជាងការរំពឹងទុក។ Timeout ត្រូវបានភ្ជាប់ទៅប្រតិបត្តិការដែលកម្មវិធីពិនិត្យមិនទាន់ឈានដល់។

Socket.SendTimeout គ្រប់គ្រងការផ្ញើសមកាលកម្ម។ វាមិនផ្តល់កំណត់ពេល 200 ms ដល់ការប៉ុនប៉ងភ្ជាប់សមកាលកម្មទេ។ ការបន្ថែមការគេងមុន Connect គ្រាន់តែបន្ថែមការពន្យារពេលមួយទៀត។

បោះបង់ប្រតិបត្តិការដែលកំពុងរង់ចាំ

នៅលើគោលដៅ .NET ទំនើបដែលផ្តល់ overload ដែលអាចបោះបង់បាន ការពិនិត្យអសមកាលអាចអនុវត្តថវិការបស់ខ្លួនទៅលើការបង្កើតការភ្ជាប់៖

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

ផ្នែកនេះជាកម្មសិទ្ធិរបស់វិធី async ដោយម៉ាស៊ីនមេ និងច្រកប្រូកស៊ីត្រូវបានផ្តល់ដោយអ្នកហៅ។ បេក្ខជនសាធារណៈពីបញ្ជីប្រូកស៊ីអាចផ្តល់ធាតុបញ្ចូលទាំងពីរនេះ។ ដោះស្រាយការបោះបង់ដោយឡែកពីកំហុស socket ប្រសិនបើកម្មវិធីពិនិត្យរាយការណ៍ពីមូលហេតុបរាជ័យ។ ការបោះចោល client ក៏រារាំងការពិនិត្យដែលបានបញ្ចប់មិនឱ្យប្រមូល socket ផងដែរ។

កូដ .NET Framework ចាស់មិនមាន overload ទំនើបទាំងអស់ទេ។ ប្រើការរៀបចំការភ្ជាប់អសមកាលដែលគាំទ្រ ហើយបិទ socket យ៉ាងច្បាស់នៅពេលអ្នកបោះបង់ការប៉ុនប៉ង។ ការបញ្ឈប់ការរង់ចាំរបស់អ្នកតែម្នាក់ឯងមិនបញ្ជាក់ថាប្រតិបត្តិការមូលដ្ឋានបានឈប់ទេ។

លទ្ធផលបៃតងនៅតែជាលទ្ធផលតូច

ការភ្ជាប់ TCP ដែលជោគជ័យបញ្ជាក់ថា client នេះបានឈានដល់ចំណុចចុងក្រោយដែលកំពុងស្តាប់។ វាមិនបានចរចា SOCKS មិនបានផ្ទៀងផ្ទាត់ជាមួយប្រូកស៊ី HTTP មិនបានបើក CONNECT ឬទទួលការឆ្លើយតបគេហទំព័រដែលចង់បានទេ។

ផ្តល់ឱ្យដំណាក់កាលក្រោយៗនោះនូវការគ្រប់គ្រងមានកំណត់ដោយខ្លួនឯង ឬដឹកនាំកំណត់ពេលសរុបដោយចេតនាឆ្លងកាត់ពួកវា។ បើមិនដូច្នេះទេ កម្មវិធីកំណត់ពេលភ្ជាប់ដែលបានជួសជុលអាចដំណើរការយ៉ាងល្អឥតខ្ចោះ ខណៈដែលកម្មវិធីពិនិត្យចំណាយមួយនាទីទៀតរង់ចាំ handshake ប្រូកស៊ី។

អត្ថបទពាក់ព័ន្ធ