Inputhandler calls async_connect which returns to one of its members. Which works through the first run.
How to solve this?
Probably, your io_service object has no more pending work, so its run() loop exits? Look at the "work" class in asio reference.