title: Why must io_service::reset() be called?
body: <p><code>io_service::reset</code> <a href="http://www.boost.org/doc/libs/1_60_0/doc/html/boost_asio/reference/io_service/reset.html" rel="nofollow">documentation</a> states that <code>reset()</code> must be called before subsequent calls to <code>run()</code>, <code>run_one()</code>, <code>poll()</code> or <code>poll_one()</code>.</p>
  
  <p>Questions:</p>
  
  <ul>
  <li>Why is this necessary?  -</li>
  <li>What behaviour might I expect if this step is neglected?</li>
  <li>Why is this requirement not important enough to warrant an <code>assert</code> if it's neglected?</li>
  </ul>
  
  <p>Some context: I finished debugging some unit-tests that checked that called <code>poll()</code> repeatedly without <code>reset()</code> and was attempting to check the expected number of handlers was being executed each time. It appears that with enough calls to <code>poll()</code>, all handlers are eventually executed in the order expected, but it takes more calls than you would otherwise expect. Correctly calling <code>reset()</code> fixes the problem, but I'm curious to know if this is the only side effect of not calling <code>reset()</code>, or if there are potentially worse effects such as dropping handlers or effects that might appear in a multi-threaded example.</p>