Finally i got the problem nailed , i am posting the answer here , just incase some body else might very likely run into the same problem.
The completion handler falls into infinite loop if the boost::asio::buffer passed to the async_receive function is of length 0. In my case i was passing a vector of size 0.