Actually, if you use OpenAL, there IS a way to check for buffer's state. Here is very good lesson how to do streaming in C++:

http://www.devmaster.net/articles/op...ls/lesson8.php

Pay special attention to function ogg_stream::update()