Socket.SendTimeout ບໍ່ຈຳກັດການພະຍາຍາມເຊື່ອມຕໍ່ຜ່ານພຣັອກຊີ
ຈຳກັດການກວດພອດພຣັອກຊີຕອນສ້າງການເຊື່ອມຕໍ່ ແທນທີ່ຈະຕັ້ງ timeout ທີ່ໃຊ້ກັບການສົ່ງຂໍ້ມູນເທົ່ານັ້ນ.
ຕົວກວດສອບພຣັອກຊີຕັ້ງ SendTimeout = 200, ເອີ້ນ Connect ແລະລໍຖ້າດົນກວ່າທີ່ຄາດໄວ້ຫຼາຍ. Timeout ຕິດຢູ່ກັບການດຳເນີນການທີ່ຕົວກວດຍັງບໍ່ທັນໄປຮອດ.
Socket.SendTimeout ຄວບຄຸມການສົ່ງແບບ synchronous. ມັນບໍ່ໃຫ້ກຳນົດເວລາ 200 ms ແກ່ການພະຍາຍາມເຊື່ອມຕໍ່ແບບ synchronous. ການເພີ່ມການນອນກ່ອນ Connect ພຽງແຕ່ເພີ່ມຄວາມລ່າຊ້າອີກອັນໜຶ່ງ.
ຍົກເລີກການດຳເນີນການທີ່ກຳລັງລໍຖ້າ
ເທິງເປົ້າໝາຍ .NET ທີ່ທັນສະໄໝທີ່ມີ overload ທີ່ຍົກເລີກໄດ້, ການກວດແບບ async ສາມາດນຳໃຊ້ງົບປະມານຂອງຕົນກັບການສ້າງການເຊື່ອມຕໍ່:
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 ທັນສະໄໝທັງໝົດ. ໃຊ້ການຈັດການເຊື່ອມຕໍ່ແບບ async ທີ່ຮອງຮັບ ແລະປິດ socket ຢ່າງຊັດເຈນເມື່ອທ່ານປະການພະຍາຍາມ. ການຢຸດການລໍຖ້າຂອງທ່ານຢ່າງດຽວບໍ່ໄດ້ພິສູດວ່າການດຳເນີນການພື້ນຖານໄດ້ຢຸດແລ້ວ.
ຜົນສີຂຽວຍັງເປັນຜົນນ້ອຍໆ
ການເຊື່ອມຕໍ່ TCP ທີ່ສຳເລັດພິສູດວ່າ client ນີ້ໄປຮອດຈຸດປາຍທາງທີ່ກຳລັງຟັງຢູ່. ມັນຍັງບໍ່ໄດ້ເຈລະຈາ SOCKS, ບໍ່ໄດ້ພິສູດຕົວຕົນກັບພຣັອກຊີ HTTP, ບໍ່ໄດ້ເປີດ CONNECT ຫຼືຮັບການຕອບສະໜອງເວັບໄຊທີ່ຕ້ອງການ.
ໃຫ້ຂັ້ນຕອນຕໍ່ໄປນັ້ນມີການຈັດການຈຳກັດຂອງຕົນເອງ, ຫຼືສົ່ງກຳນົດເວລາລວມທີ່ຕັ້ງໃຈຜ່ານພວກມັນ. ຖ້າບໍ່ດັ່ງນັ້ນ ຕົວຈັບເວລາເຊື່ອມຕໍ່ທີ່ສ້ອມແລ້ວອາດເຮັດວຽກຢ່າງສົມບູນ ໃນຂະນະທີ່ຕົວກວດໃຊ້ເວລາອີກໜຶ່ງນາທີລໍຖ້າ handshake ພຣັອກຊີ.