Mit
indy kenne ich mich nicht so gut aus, weil sie (soweit ich weiß) im blocking-modus arbeiten. Ich empfehle dir die TClientSocket Komponente zu verwenden.
Bei ihr setzt du das OnRead Ereignis, das nur dann aufgerufen wird, falls Daten vorhanden sind.