Warum nur immer so umständlich?
Folgende Punkte dazu als Ideen/Hinweise:
1. In den Ereignisen wird immer ein Socket vom Typ TCustomWinSocket übergeben. Diesen findet man
immer in der Connection[] Eigenschaft vom Server wieder. Jederzeit, bei jedem Ereignis. Selbst beim OnDisconnect wird dieser erst nach Abarbeitung des Ereignis-Callbacks entfernt.
2. Die Instanz des TCustomWinSocket, welcher übergeben wird und in der o.g. Eigenschaft vorhanden ist, ist eindeutig über seine Lebzeit. Mit anderen Worten: Wenn ihr die Instanzenadresse als "
Handle" nutzt ("
Handle" := Integer(Socket)), dann ist diese eindeutig vom OnClientConnect Ereignis bis zum OnClientDisconnect Ereignis. (Wobei hier ein direktes vermerken der Socket Instanz einfacher ist, da man so einfach den Socket bei der Hand hat, wenn man die Informationen von anderer Seite aus seinem Datengrund herausholt.)
3. Wenn ihr zusätzliche Informationen zu den Sockets verwalten wollt, dann definiert euch einen Record oder eine Klasse und legt sie darin ab. Die eindeutig Zuordnung schafft ihr durch vermerken der Record Adresse bzw. der Instanz der Klasse in der Data Eigenschaft des TCustomWinSockets. So legt den Record bzw. die Klasse im OnClientConnect an und weist ihn zu - beim OnClientDisconnect gebt ihn wieder frei. In allen zwischenzeitlichen Ereignissen bekommt ihr den Socket mit an den Kopf geworfen, also einfach die Data Eigenschaft nutzen und ihr wisst, um welchen Client es geht.
Um zur ersten Frage von mir zurück zu kommen: Wozu eine Socket/Handlenummer verwalten, wenn die Socket-Instanz eindeutig ist, verwaltet wird und zusätzliche Informationen (Data Eigenschaft) aufnehmen kann.