Hi Erik,
Thanks for the reply! It does explain why my code doesn't work well without passing :READY-ONLY T (it probably tried to read from sockets that weren't ready, thus blocking the thread).
It's a pity that this arg is undocumented, and it should really be T by default (with NIL it defies the documented purpose of wait-for-input). I've spent a couple of hours fighting this out.
Cheers, -Mihai