RC15 has the same problem.
That situation happens when connection is overloaded. ::recv doesn't return that socket is closed, and ask to wait more, more and more... That is never ends.
There is some timeout handling have to be implemented. If there is no any data receved for some period of time, underlying http connection should be reopened. I've used 0.5 seconds, works fine, but that is not right since that value is function from stream bitrate and buffer size.
I've beed managed to fix that. I know, it is dirty, but that works for me as temporarry solution.
CODE
void Reader_http::fillbuf(UINT max,bool shutup)
{
if (max==0) max=1;
if (length>0 && position+max>length) max=(int)(length-position);
const DWORD timeout = 500;
int last_bytes_read = -1;
DWORD last_bytes_time = 0;
while(!aborting) //stop prebuffering if we want to seek
{
if (get.run()) break;
int bytes_available = get.bytes_available();
if (aborting || bytes_available >= (int)max) break;
if (last_bytes_read < bytes_available) {
last_bytes_read = bytes_available;
last_bytes_time = GetTickCount();
} else if ((GetTickCount() - last_bytes_time) >= timeout) {
http_init(); // reconnect
b_starting = false;
last_bytes_read = -1;
last_bytes_time = 0;
}
SleepEx(1,TRUE);
}
}
Songs titles are back in RC15, that is great!