Alka, ti sfido! (So che sei bravo su queste cose..)
Crea un nuovo form, mettici il componete IdTCPServer, apri il socket e mettilo in ascolto.
Fatto ciò collegati con uno o due telnet al socket appena aperto, dopodiché chiudi il form (chiaramente il form deve sconnettere le connessioni attive.)
Prova una decina di volte e fammi sapere quante volte sarai costretto a chiudere il form con il taskmanager.

Lato client
codice:
ClientSocket:= TIdTcpClient.Create(Self);
    ClientSocket.Host:= 'cicciopasticcio.dyndns.org';
    ClientSocket.Port:= 3001;
    ClientSocket.Connect;
    TMLog.Lines.Append('Connesso con '+ ClientSocket.Host+ IntToStr(ClientSocket.Port));

    ThLeggiSocket.Create();

    ClientSocket.IOHandler.WriteLn('cur'+ GetCurrentDir);
Poi io uso un thread per leggere dal socket (sempre lato client)


codice:
procedure ThLeggiSocket.Execute;
begin
  try
    while MainForm.ClientSocket.IOHandler.Connected do begin
      try
        RigaIn:= MainForm.ClientSocket.IOHandler.ReadLn();

Se usi il thread ricordati che devi sincronizzarlo con il main form.