title: Is boost::asio tcp socket shutdown blocking or not?
body: <p>boost::asio TCP socket accept/read/write all provide async version, but not shutdown.<br></p>
  
  <p>In my code, I just call socket.close(), and most of the time it works fine. It triggered a graceful TCP shutdown.<br></p>
  
  <p>But some times, close() simply close the socket without TCP shutdown. As a result, I have to call shutdown() instead. But I don't want to block my code.
  Is shutdown() blocking in boost:asio?
  How about close()? Is close() blocking?</p>