Ok, sorry, das hatte ich nicht richtig verstanden - aber du hattest es ja oben geschrieben. Gekonnt ignoriert, sage ich da mal.
Ansonsten ist das Verhalten der Sockets wirklich komisch, aber anscheinend wird beim Close der Socket nicht richtig geschlossen und der Thread wird trotzdem mit dem TimeOut informiert. Im Normalfall hängt er so lange in dem aufgerufenen Socket Connect Aufruf bis dieser durch TimeOut zurück kehrt. Da das Close den Socket als "closed" intern vermerken kann, kann er aber nicht die schon aufgerufene Funktion abbrechen, da er dort gerade in der WinSock drinne hängt.
Als Lösung würde ich folgendes Versuchen: Der TCustomWinSocket hat afair eine Eigenschaft mit dem
Handle. Wenn du nun mit deinem eigenen TimeOut den Socket abbrichst, dann vermerke dir vorher dieses
Handle. Bei der
Exception dann vergleich, ob es dieses vermerkte
Handle ist und ignoriere den OnError Aufruf komplett. Das wäre ein Vorschlag, in der Annahme, dass das
Handle sich unterscheidet zwischen den Versuchen/Verbindungen. Wenn das
Handle aber auf der Instanz von TCustomWinSocket basiert, dann wird es wohl nicht klappen. Naja, nur mal so eine Idee...