Nid yw Socket.SendTimeout yn cyfyngu ymgais cysylltiad procsi
Cyfyngwch brawf porth procsi wrth sefydlu'r cysylltiad yn lle gosod terfyn amser sy'n berthnasol i anfon data yn unig.
Mae gwirydd procsi yn gosod SendTimeout = 200, yn galw Connect, ac yn aros yn llawer hirach na'r disgwyl. Mae'r terfyn amser ynghlwm wrth weithred nad yw'r gwirydd wedi cyrraedd eto.
Mae Socket.SendTimeout yn rheoli anfoniadau cydamserol. Nid yw'n rhoi terfyn 200 ms i ymgais cysylltiad cydamserol. Mae ychwanegu cwsg cyn Connect yn ychwanegu oedi arall yn unig.
Canslo'r weithred sy'n aros
Ar darged .NET modern sy'n darparu'r gorlwytho canslo, gall prawf async gymhwyso ei gyllideb i sefydlu'r cysylltiad:
using var budget = new CancellationTokenSource(TimeSpan.FromSeconds(2));
using var client = new TcpClient();
await client.ConnectAsync(proxyHost, proxyPort, budget.Token);
Mae'r darn yn perthyn mewn dull async, gyda gwesteiwr a phorth y procsi yn cael eu darparu gan y galwr; gall ymgeisydd cyhoeddus o restr procsi ddarparu'r ddau fewnbwn hynny. Trin canslo ar wahân i wall soced os yw'r gwirydd yn nodi rhesymau methiant. Mae gwaredu'r cleient hefyd yn atal profion gorffenedig rhag cronni socedi.
Nid oes gan god .NET Framework hŷn bob gorlwytho modern. Defnyddiwch drefniant cysylltiad async a gefnogir a chaewch y soced yn benodol wrth gefnu ar yr ymgais. Nid yw stopio eich aros yn unig yn profi bod gweithred sylfaenol wedi stopio.
Mae'r canlyniad gwyrdd yn dal i fod yn ganlyniad bach
Mae cysylltiad TCP llwyddiannus yn profi bod y cleient hwn wedi cyrraedd pwynt terfyn sy'n gwrando. Nid yw wedi negodi SOCKS, wedi dilysu i brocsi HTTP, wedi agor CONNECT nac wedi derbyn ymateb y wefan a ddymunir.
Rhowch driniaeth gyfyngedig eu hunain i'r camau diweddarach hynny, neu gludwch derfyn amser cyffredinol bwriadol drwyddynt. Fel arall gall yr amserydd cysylltiad a atgyweiriwyd weithio'n berffaith tra bo'r gwirydd yn treulio munud arall yn aros am handshake procsi.