title: Some clarification needed about synchronous versus asynchronous asio operations
body: <p>As far as I know, the main difference between synchronous and asynchronous operations (i.e. <code>write()</code> or <code>read()</code> vs <code>async_write()</code> and <code>async_read()</code>) The former ones don't return until the operation finish -or error, and the later ones, returns immediately.</p>
  <p>Due the fact that the asynchronous operations are controlled by an <code>io_service.run()</code> that does not finish until the controlled operations has finalized. It seems to me that in sequential operations as those involved in TCP/IP connections with protocols such as POP3, in which the operation is a sequence such as:</p>
  <pre><code> C: &lt;connect&gt;
   S: Ok.
   C: User...
   S: Ok.
   C: Password
   S: Ok.
   C: Command
   S: answer
   C: Command
   S: answer
   ...
   C: bye
   S: &lt;close&gt;
  </code></pre>
  <p>The difference between synchronous/asynchronous operators does not make much sense.</p>
  <p>Of course, in both operations there is always the risk that the program flow stops indefinitely by some circumstance -there the use of timers-, but I would like know some more authorized opinions in this matter.</p>
  <p>I must admit that the question is rather ill-defined, but I would like to hear some advice about when to use one or the other. I've run into problems when debugging with MS Visual Studio regarding asynchronous SSL operations in a POP3 client on which I'm now working, and sometimes think that perhaps it is a bad idea use asynchronous in this.</p>