提高ASIO,如何取消异步操作

编程入门 行业动态 更新时间:2024-10-28 19:19:05
本文介绍了提高ASIO,如何取消异步操作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我写使用升压ASIO,代理服务器有两个插座代理服务程序(client_socket_,server_socket _)如果套接字中的一个断开另一个保持active.For例如,如果从在错误client_socket_结果读取我将关闭client_socket_,然后等待客户端重新连接和客户端重新连接后,我是从一个插座读取和写入到另一个。

的问题在于,当我关闭client_socket_如何取消异步操作在server_socket_?如果我不这样做,客户端连接后,previous异步操作将被执行。后续的处理程序是跟踪,处理19是需要取消。

E:\\ code \\ vdoctor-R \\ code \\ DNC \\调试和GT; forwardserver.exe@asio | 1337591080.941830 | 0 * 1 | socket@0012FA58.async_accept@asio | 1337591107.009440 |→1 | EC =系统:0@asio | 1337591107.009440 | 1 * 2 | strand@003E8340.dispatch@asio | 1337591107.009440 |→2 |@asio | 1337591107.009440 | 2 * 3 | socket@0012FAB0.async_connect@asio | 1337591107.025059 | 2 * 4 | socket@0012FA58.async_accept@asio | 1337591107.025059 | 2 |@asio | 1337591107.025059 |< 1 |@asio | 1337591107.025059 |→3 | EC =系统:0@asio | 1337591107.025059 | 3 * 5 | strand@003E8340.dispatch@asio | 1337591107.025059 |→5 |2012年五月21 17点05分07秒[信息] - [E:\\ code \\ vdoctor-R \\ code \\ DNC \\ forwardserver \\ forward_server.cpp(114):forward_server :: handle_connect_to_server]连接到服务器更迭sful,开始从两侧接收数据@asio | 1337591107.040678 | 5 * 6 | socket@003E83D4.async_receive@asio | 1337591107.040678 | 5 * 7 | socket@0012FAB0.async_receive@asio | 1337591107.040678 |小于5 |@asio | 1337591107.040678 | 3; |@asio | 1337591107.040678 |→6 | EC =系统:0,bytes_transferred = 20@asio | 1337591107.040678 | 6 * 8 | strand@003E8340.dispatch@asio | 1337591107.040678 |→8 |@asio | 1337591107.040678 | 8 * 9 | socket@003E83D4.async_receive@asio | 1337591107.040678 |< 8 |@asio | 1337591107.040678 | 6; |@asio | 1337591107.040678 |> 9 | EC =系统:0,bytes_transferred = 17@asio | 1337591107.040678 | 9 * 10 | strand@003E8340.dispatch@asio | 1337591107.040678 |> 10 |@asio | 1337591107.040678 | 10 * 11 | socket@0012FAB0.async_send@asio | 1337591107.056296 |小于10 |@asio | 1337591107.056296 |< 9 |@asio | 1337591107.056296 |> 11 | EC =系统:0,bytes_transferred = 37@asio | 1337591107.056296 | 11 * 12 | strand@003E8340.dispatch@asio | 1337591107.056296 |> 12 |@asio | 1337591107.056296 | 12 * 13 | socket@003E83D4.async_receive@asio | 1337591107.056296 |< 12 |@asio | 1337591107.056296 |< 11 |@asio | 1337591107.071915 |大于7 | EC =系统:0,bytes_transferred = 20@asio | 1337591107.071915 | 7 * 14 | strand@003E8340.dispatch@asio | 1337591107.071915 |> 14 |@asio | 1337591107.071915 | 14 * 15 | socket@0012FAB0.async_receive@asio | 1337591107.071915 |< 14 |@asio | 1337591107.071915 | 7; |@asio | 1337591107.071915 |→15 | EC =系统:0,bytes_transferred = 18@asio | 1337591107.071915 | 15 * 16 | strand@003E8340.dispatch@asio | 1337591107.071915 |> 16 |@asio | 1337591107.071915 | 16 * 17 | socket@003E83D4.async_send@asio | 1337591107.071915 |< 16 |@asio | 1337591107.071915 |< 15 |@asio | 1337591107.087534 |> 17 | EC =系统:0,bytes_transferred = 38@asio | 1337591107.087534 | 17 * 18 | strand@003E8340.dispatch@asio | 1337591107.087534 |> 18 |@asio | 1337591107.087534 | 18 * 19 | socket@0012FAB0.async_receive@asio | 1337591107.087534 |< 18 |@asio | 1337591107.087534 |< 17 |@asio | 1337591107.884087 |> 13 | EC = asio.misc:2,bytes_transferred = 0@asio | 1337591107.884087 | 13 * 20 | strand@003E8340.dispatch@asio | 1337591107.884087 |→20 |2012年五月21 17点05分07秒[错误] - [E:\\ code \\ vdoctor-R \\ code \\ DNC \\ forwardserver \\ forward_server.cpp(273):forward_server :: handle_read_header_from_client]读取头文件的客户端错误,结束@asio | 1337591107.884087 | 20 | socket@003E83D4.close@asio | 1337591107.884087 |&小于20 |@asio | 1337591107.884087 |δ13 |@asio | 1337591222.813720 |→4 | EC =系统:0@asio | 1337591222.813720 | 4 * 21 | strand@003E8340.dispatch@asio | 1337591222.813720 |> 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 |< 21 |@asio | 1337591222.813720 | 4; |@asio | 1337591222.813720 |> 22 | EC =系统:0,bytes_transferred = 20@asio | 1337591222.813720 | 22 *​​ 25 | strand@003E8340.dispatch@asio | 1337591222.813720 |→25 |@asio | 1337591222.813720 | 25 * 26 | socket@003ECF2C.async_receive@asio | 1337591222.813720 |α25 |@asio | 1337591222.813720 |< 22 |@asio | 1337591222.813720 |> 26 | EC =系统:0,bytes_transferred = 17@asio | 1337591222.813720 | 26 * 27 | strand@003E8340.dispatch@asio | 1337591222.813720 |> 27 |@asio | 1337591222.813720 | 27 * 28 | socket@0012FAB0.async_send@asio | 1337591222.813720 |< 27 |@asio | 1337591222.813720 |< 26 |@asio | 1337591222.813720 |> 28 | EC =系统:0,bytes_transferred = 37@asio | 1337591222.813720 | 28 * 29 | strand@003E8340.dispatch@asio | 1337591222.813720 |> 29 |@asio | 1337591222.813720 | 29 * 30 | socket@003ECF2C.async_receive@asio | 1337591222.813720 |< 29 |@asio | 1337591222.813720 |< 28 |@asio | 1337591222.813720 |> 19 | EC =系统:0,bytes_transferred = 20@asio | 1337591222.813720 | 19 * 31 | strand@003E8340.dispatch@asio | 1337591222.813720 |> 31 |@asio | 1337591222.813720 | 31 * 32 | socket@0012FAB0.async_receive@asio | 1337591222.813720 |< 31 |@asio | 1337591222.813720 |所述19 |@asio | 1337591222.813720 |> 23 | EC =系统:0,bytes_transferred = 18@asio | 1337591222.813720 | 23 * 33 | strand@003E8340.dispatch@asio | 1337591222.829340 |> 33 |@asio | 1337591222.829340 | 33 * 34 | socket@0012FAB0.async_receive@asio | 1337591222.829340 |γ-33 |@asio | 1337591222.829340 |< 23 |

解决方案

要取消server_socket_ async.operations唯一的便携和可靠的方法是将其关闭。请参阅下面的详细信息链接。

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.

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.

E:\code\vdoctor-r\code\dnc\Debug>forwardserver.exe @asio|1337591080.941830|0*1|socket@0012FA58.async_accept @asio|1337591107.009440|>1|ec=system:0 @asio|1337591107.009440|1*2|strand@003E8340.dispatch @asio|1337591107.009440|>2| @asio|1337591107.009440|2*3|socket@0012FAB0.async_connect @asio|1337591107.025059|2*4|socket@0012FA58.async_accept @asio|1337591107.025059|<2| @asio|1337591107.025059|<1| @asio|1337591107.025059|>3|ec=system:0 @asio|1337591107.025059|3*5|strand@003E8340.dispatch @asio|1337591107.025059|>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|<5| @asio|1337591107.040678|<3| @asio|1337591107.040678|>6|ec=system:0,bytes_transferred=20 @asio|1337591107.040678|6*8|strand@003E8340.dispatch @asio|1337591107.040678|>8| @asio|1337591107.040678|8*9|socket@003E83D4.async_receive @asio|1337591107.040678|<8| @asio|1337591107.040678|<6| @asio|1337591107.040678|>9|ec=system:0,bytes_transferred=17 @asio|1337591107.040678|9*10|strand@003E8340.dispatch @asio|1337591107.040678|>10| @asio|1337591107.040678|10*11|socket@0012FAB0.async_send @asio|1337591107.056296|<10| @asio|1337591107.056296|<9| @asio|1337591107.056296|>11|ec=system:0,bytes_transferred=37 @asio|1337591107.056296|11*12|strand@003E8340.dispatch @asio|1337591107.056296|>12| @asio|1337591107.056296|12*13|socket@003E83D4.async_receive @asio|1337591107.056296|<12| @asio|1337591107.056296|<11| @asio|1337591107.071915|>7|ec=system:0,bytes_transferred=20 @asio|1337591107.071915|7*14|strand@003E8340.dispatch @asio|1337591107.071915|>14| @asio|1337591107.071915|14*15|socket@0012FAB0.async_receive @asio|1337591107.071915|<14| @asio|1337591107.071915|<7| @asio|1337591107.071915|>15|ec=system:0,bytes_transferred=18 @asio|1337591107.071915|15*16|strand@003E8340.dispatch @asio|1337591107.071915|>16| @asio|1337591107.071915|16*17|socket@003E83D4.async_send @asio|1337591107.071915|<16| @asio|1337591107.071915|<15| @asio|1337591107.087534|>17|ec=system:0,bytes_transferred=38 @asio|1337591107.087534|17*18|strand@003E8340.dispatch @asio|1337591107.087534|>18| @asio|1337591107.087534|18*19|socket@0012FAB0.async_receive @asio|1337591107.087534|<18| @asio|1337591107.087534|<17| @asio|1337591107.884087|>13|ec=asio.misc:2,bytes_transferred=0 @asio|1337591107.884087|13*20|strand@003E8340.dispatch @asio|1337591107.884087|>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|<20| @asio|1337591107.884087|<13| @asio|1337591222.813720|>4|ec=system:0 @asio|1337591222.813720|4*21|strand@003E8340.dispatch @asio|1337591222.813720|>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|<21| @asio|1337591222.813720|<4| @asio|1337591222.813720|>22|ec=system:0,bytes_transferred=20 @asio|1337591222.813720|22*25|strand@003E8340.dispatch @asio|1337591222.813720|>25| @asio|1337591222.813720|25*26|socket@003ECF2C.async_receive @asio|1337591222.813720|<25| @asio|1337591222.813720|<22| @asio|1337591222.813720|>26|ec=system:0,bytes_transferred=17 @asio|1337591222.813720|26*27|strand@003E8340.dispatch @asio|1337591222.813720|>27| @asio|1337591222.813720|27*28|socket@0012FAB0.async_send @asio|1337591222.813720|<27| @asio|1337591222.813720|<26| @asio|1337591222.813720|>28|ec=system:0,bytes_transferred=37 @asio|1337591222.813720|28*29|strand@003E8340.dispatch @asio|1337591222.813720|>29| @asio|1337591222.813720|29*30|socket@003ECF2C.async_receive @asio|1337591222.813720|<29| @asio|1337591222.813720|<28| @asio|1337591222.813720|>19|ec=system:0,bytes_transferred=20 @asio|1337591222.813720|19*31|strand@003E8340.dispatch @asio|1337591222.813720|>31| @asio|1337591222.813720|31*32|socket@0012FAB0.async_receive @asio|1337591222.813720|<31| @asio|1337591222.813720|<19| @asio|1337591222.813720|>23|ec=system:0,bytes_transferred=18 @asio|1337591222.813720|23*33|strand@003E8340.dispatch @asio|1337591222.829340|>33| @asio|1337591222.829340|33*34|socket@0012FAB0.async_receive @asio|1337591222.829340|<33| @asio|1337591222.829340|<23|

解决方案

The only portable and reliable way to cancel async.operations on server_socket_ is to close it. See the following link for details.

更多推荐

提高ASIO,如何取消异步操作

本文发布于:2023-10-30 03:04:07,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1541577.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:操作   ASIO

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!