Indy server -> client communication question

When an idTCPServer component is connected and receives something, an
OnExecute event is started. So then you can just ReadLn the info. But when
an idTCPClient receives something, no event is raised. In the Chat demo with
the Indy components, a timer just tells the idTCPClient every 500 ms. to
ReadLn, and when it's <> '' you know you got something.

I don't have any experience with sockets etc., but why do you have to do
this with a timer and why is there no event? It doesn't make a lot sense to
me.

TIA