When I did a recv after getting something back from select,
I consistently got empty (i.e. zero byte) responses.
Though I'm not entirely sure what is supposed to happen
here, this does make some kind of sense to me -- select
is saying "yeah, the socket's there, go ahead and
read from it," even though there is no data
presently waiting.
As for books, I highly recommend UNIX Network Programming by W. Richard Stevens, and Douglas Comer's
Internetworking with TCP/IP (Vol. I covers the basic,
low-level stuff).
Not exactly light bedtime reading, but they will give you a solid understanding of what lies beneath all these slick perl modules.