Ok, dann mal den Code durchgehen...
1.
Active := true ist das gleiche wie
Open
2. Ich empfehle eher
Socket.Close aufzurufen anstatt das Close des ClientSockets.
3. Wenn 2. erfolgt (im Fehler wie auch im Erfolgsfall), dann im OnDisconnect den neuen Verbindungsversuch starten und nicht direkt von dem Event welches den Erfolg/Fehler meldet.
4. Im Fehlerfall (OnError) kannst du normalerweise mit dem Socket nichts mehr anfangen, also den Socket unabhängig vom Fehlercode einfach schliessen. Es macht da keinen Unterschied den Grund näher zu unterscheiden (ausser dem Nutzer aufzubereiten).
5. Dein Befüllen des Labels wie auch der ListBox ist mehrfach vorhanden. Schreib dir eine Methode welches dieses erledigt und einfach nur den aktuelle
IP übergeben bekommt.