Das Schließen eines Sockets ist immer ein Problem. Egal wie man es macht im Grunde unterbricht immer eine Seite, eg Client oder Server, die Verbindung.
Ich mache es so das der Client ein Kommando sendet das er den Socket schließen will. Darauf hin schließt der Server den Socket mit CloseSocket(). Der Client hat nach dem Senden des Kommandos noch zu warten, ca. 2 Sekunden, und schließt dann ebenfalls den Socket. Sinn der Übung ist es die mögliche Fehlermeldung das der Socket unterbrochen wurde, eg. in
Indy "Connection closed gracefully", auf Client Seite zu verlagern. Damit wird also der Server entlastet. Sollte das
TCP/
IP Packet des Kommandos zum Schließen nicht innerhalb von 2 Sekunden vom Server bearbeitet wurden sein, so bekommt der Server obige Fehlermeldung. Sogesehen ist die Fehlermeldung im
Indy garkein Fehler ansich.
Gruß Hagen