Die "can_read"-Methode gibt Dir alle Handles zurück, von denen Du lesen kannst, Du also beim Lesen nie blockieren wirst. Das ist ja der Sinn von "IO::Select".
Wenn der Puffer leer ist blockiert (endet nicht) can_read, weil Du keinen Timeout angegeben hast. Die while-Schleife endet nicht, kan garnicht, weil die Bedingung überhaupt nicht mehr geprüft wird!
Du kommst nur aus der while-Schleife, wenn die Gegenseite ein EOF sendet. Dann blockiert can_read auch nicht. "can_read" tut dann so, als wenn Du lesen könntest. Wenn Du aber liest ist die Anzahl der gelesenen Bytes genau 0, das ist Dein Zeichen. Ein EOF sendest Du von der Gegenseite, indem Du "shutdown($socket, 1)" ausführst. Oder war es nicht 1 sondern 2, lies mal in der Doku von "IO:Socket", das eine schließt die Empfangsseite, das andere die Sendeseite.
Wie schon gesagt, wie viele Bytes wirklich ankommen, ist der Rückgabeparameter von "read".
Alles was Du brauchst, gibt Dir "IO::Socket" an die Hand, vergiß so etwas wie Header lesen.\n\n
<!--EDIT|steffenw|1093372180-->
$SIG{USER} = sub {love 'Perl' or die};