 <p>This is an old question but you never really got an answer about run vs poll. </p> <p>io_service::run will keep running as long as there is something to do, such as waiting on a deadline timer or IO completion notification, etc. This is why there is the work object to keep run from exiting. </p> <p>io_service::poll will only execute ready handlers, and will not return until there are no more handlers ready to be dispatched. </p> <p>The difference in other words is that run will wait for a pending handler to be ready, like a timer or IO completion notification, while poll will return in that situation. </p> <p>This behavior is useful if you want to perform some idle processing. </p>