title: boost asio,how to cancel an asynchronous operation
body: <p>I wrote a proxy service program that used boost asio, the proxy server has two socket(client_socket_,server_socket_)，If one of the socket is disconnected another one to remain active。For example, if read from client_socket_ results in error, i will close client_socket_ and then wait for client to reconnect and after client reconnects, I read from one socket and write to another.</p>
  
  <p>The problem is that, when i close the client_socket_ how to cancel the asynchronous operation
  in server_socket_? if i do not do this, the previous asynchronous operation will execute after client connected. The follow is handler tracking, handler 19 is need to cancel.</p>
  
  <pre><code>E:\code\vdoctor-r\code\dnc\Debug&gt;forwardserver.exe
  @asio|1337591080.941830|0*1|socket@0012FA58.async_accept
  @asio|1337591107.009440|&gt;1|ec=system:0
  @asio|1337591107.009440|1*2|strand@003E8340.dispatch
  @asio|1337591107.009440|&gt;2|
  @asio|1337591107.009440|2*3|socket@0012FAB0.async_connect
  @asio|1337591107.025059|2*4|socket@0012FA58.async_accept
  @asio|1337591107.025059|&lt;2|
  @asio|1337591107.025059|&lt;1|
  @asio|1337591107.025059|&gt;3|ec=system:0
  @asio|1337591107.025059|3*5|strand@003E8340.dispatch
  @asio|1337591107.025059|&gt;5|
  2012-May-21 17:05:07 [info]-[e:\code\vdoctor-r\code\dnc\forwardserver\forward_se
  rver.cpp(114):forward_server::handle_connect_to_server] connect to server succes
  sful, start to receive data from both sides
  @asio|1337591107.040678|5*6|socket@003E83D4.async_receive
  @asio|1337591107.040678|5*7|socket@0012FAB0.async_receive
  @asio|1337591107.040678|&lt;5|
  @asio|1337591107.040678|&lt;3|
  @asio|1337591107.040678|&gt;6|ec=system:0,bytes_transferred=20
  @asio|1337591107.040678|6*8|strand@003E8340.dispatch
  @asio|1337591107.040678|&gt;8|
  @asio|1337591107.040678|8*9|socket@003E83D4.async_receive
  @asio|1337591107.040678|&lt;8|
  @asio|1337591107.040678|&lt;6|
  @asio|1337591107.040678|&gt;9|ec=system:0,bytes_transferred=17
  @asio|1337591107.040678|9*10|strand@003E8340.dispatch
  @asio|1337591107.040678|&gt;10|
  @asio|1337591107.040678|10*11|socket@0012FAB0.async_send
  @asio|1337591107.056296|&lt;10|
  @asio|1337591107.056296|&lt;9|
  @asio|1337591107.056296|&gt;11|ec=system:0,bytes_transferred=37
  @asio|1337591107.056296|11*12|strand@003E8340.dispatch
  @asio|1337591107.056296|&gt;12|
  @asio|1337591107.056296|12*13|socket@003E83D4.async_receive
  @asio|1337591107.056296|&lt;12|
  @asio|1337591107.056296|&lt;11|
  @asio|1337591107.071915|&gt;7|ec=system:0,bytes_transferred=20
  @asio|1337591107.071915|7*14|strand@003E8340.dispatch
  @asio|1337591107.071915|&gt;14|
  @asio|1337591107.071915|14*15|socket@0012FAB0.async_receive
  @asio|1337591107.071915|&lt;14|
  @asio|1337591107.071915|&lt;7|
  @asio|1337591107.071915|&gt;15|ec=system:0,bytes_transferred=18
  @asio|1337591107.071915|15*16|strand@003E8340.dispatch
  @asio|1337591107.071915|&gt;16|
  @asio|1337591107.071915|16*17|socket@003E83D4.async_send
  @asio|1337591107.071915|&lt;16|
  @asio|1337591107.071915|&lt;15|
  @asio|1337591107.087534|&gt;17|ec=system:0,bytes_transferred=38
  @asio|1337591107.087534|17*18|strand@003E8340.dispatch
  @asio|1337591107.087534|&gt;18|
  @asio|1337591107.087534|18*19|socket@0012FAB0.async_receive
  @asio|1337591107.087534|&lt;18|
  @asio|1337591107.087534|&lt;17|
  @asio|1337591107.884087|&gt;13|ec=asio.misc:2,bytes_transferred=0
  @asio|1337591107.884087|13*20|strand@003E8340.dispatch
  @asio|1337591107.884087|&gt;20|
  2012-May-21 17:05:07 [error]-[e:\code\vdoctor-r\code\dnc\forwardserver\forward_s
  erver.cpp(273):forward_server::handle_read_header_from_client] read header from
  client error,End of file
  @asio|1337591107.884087|20|socket@003E83D4.close
  @asio|1337591107.884087|&lt;20|
  @asio|1337591107.884087|&lt;13|
  @asio|1337591222.813720|&gt;4|ec=system:0
  @asio|1337591222.813720|4*21|strand@003E8340.dispatch
  @asio|1337591222.813720|&gt;21|
  @asio|1337591222.813720|21*22|socket@003ECF2C.async_receive
  @asio|1337591222.813720|21*23|socket@0012FAB0.async_receive
  @asio|1337591222.813720|21*24|socket@0012FA58.async_accept
  @asio|1337591222.813720|&lt;21|
  @asio|1337591222.813720|&lt;4|
  @asio|1337591222.813720|&gt;22|ec=system:0,bytes_transferred=20
  @asio|1337591222.813720|22*25|strand@003E8340.dispatch
  @asio|1337591222.813720|&gt;25|
  @asio|1337591222.813720|25*26|socket@003ECF2C.async_receive
  @asio|1337591222.813720|&lt;25|
  @asio|1337591222.813720|&lt;22|
  @asio|1337591222.813720|&gt;26|ec=system:0,bytes_transferred=17
  @asio|1337591222.813720|26*27|strand@003E8340.dispatch
  @asio|1337591222.813720|&gt;27|
  @asio|1337591222.813720|27*28|socket@0012FAB0.async_send
  @asio|1337591222.813720|&lt;27|
  @asio|1337591222.813720|&lt;26|
  @asio|1337591222.813720|&gt;28|ec=system:0,bytes_transferred=37
  @asio|1337591222.813720|28*29|strand@003E8340.dispatch
  @asio|1337591222.813720|&gt;29|
  @asio|1337591222.813720|29*30|socket@003ECF2C.async_receive
  @asio|1337591222.813720|&lt;29|
  @asio|1337591222.813720|&lt;28|
  @asio|1337591222.813720|&gt;19|ec=system:0,bytes_transferred=20
  @asio|1337591222.813720|19*31|strand@003E8340.dispatch
  @asio|1337591222.813720|&gt;31|
  @asio|1337591222.813720|31*32|socket@0012FAB0.async_receive
  @asio|1337591222.813720|&lt;31|
  @asio|1337591222.813720|&lt;19|
  @asio|1337591222.813720|&gt;23|ec=system:0,bytes_transferred=18
  @asio|1337591222.813720|23*33|strand@003E8340.dispatch
  @asio|1337591222.829340|&gt;33|
  @asio|1337591222.829340|33*34|socket@0012FAB0.async_receive
  @asio|1337591222.829340|&lt;33|
  @asio|1337591222.829340|&lt;23|
  </code></pre>