Remember how I said I assumed the forking code was fine? Well, I grabbed your latest code posting, and to my surprise, it wouldn't run! After some more debugging (looks like I'm reading more code than I'm writing lately) I think I've found a contention issue (not really sure)...anywho:
#i'm the parent!
warn "(Parent) I'm the parent\n";
warn "(Parent) Connecton recieved ... ",$connection>peerhost,"\n";
#close the connection, the parent has already passed
# it off to a child.
warn "(Parent) Closing connection\n";
Those extra warn
statements lead me to believe that the parent was closing the $connection
before the child got to call play_songs
hence the sleep
call. I chose "3" randomly, but it works fine now, and the sleep doesn't affect any of the logic or flow.