I won't pretend to know why it actually does that, maybe someone can answer that (it surprised me at the time too). It does only do it for STDIN as far as I can see, Sockets work exactly as you would expect (really waits until the other side sends some data).
So maybe it's something to do with a special case for STDIN..
C.