Hi folks,
I've been experiencing the same problem that was reported earlier ("it seems to be going very fast"). I'm on Win32 (both NT4 and Win2k) and played around with the script for a while before figuring out a fix. It looks like a:
BINMODE(SONG);
fixes all. I also took out the forking-ness of the server, just to simplify the debug process, but I'm sure that's OK.
With the fix in place, the code segment now looks like this:
<text cut>
...
#what song are we playing
warn( "play song: $song\n");
#open the song, or continue to try another one
open (SONG, $song) || next;
#### NEW CODE ####
binmode (SONG);
#### END NEW CODE ####
my $read_status = 1;
my $print_status = 1;
my $chunk;
....
<end cut>
I think this fix suggests that somewhere in the MP3's being streamed, read() was encountering what it thought was an EOF, where in fact it was misinterpreting the data. Am I right? (I guessed at binmode, read the cookbook, then understood)
Hope this helps,
Brainiac | [reply] [Watch: Dir/Any] [d/l] [select] |
Thanks for the debugging!
I dont use windows, so I never think about binmode.
That routine doesnt hurt on unix, so I will add it into
the server code for all to use.
-perlmonkey
| [reply] [Watch: Dir/Any] |
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:
else
{
#i'm the parent!
warn "(Parent) I'm the parent\n";
#who connected?
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";
sleep 3;
$connection->close();
}
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.
Brainiac | [reply] [Watch: Dir/Any] [d/l] [select] |