It's fine to call start_accept() inside the handle_accept() function, if you don't do it your server will not be able to accept another client
You should check if the ioservice has enough threads to handle more than one client, maybe you have a single thread being blocked by the call to session->start(), if this is the case, your server cannot accept another client until the thread is released (make sure the ioservice has an oioservice::work object attached, btw).
__________Saludos!
Juan