Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关闭带有挂起连接的boost::asio::ip::tcp::套接字_Boost_Boost Asio - Fatal编程技术网

关闭带有挂起连接的boost::asio::ip::tcp::套接字

关闭带有挂起连接的boost::asio::ip::tcp::套接字,boost,boost-asio,Boost,Boost Asio,根据boostasio文档,如果我在一个异步连接操作挂起的套接字上调用close,处理程序将被“立即”调用,并显示错误代码。从文件中: 此功能用于关闭插座。任何异步发送、接收或连接操作都将立即取消,并将完成boost::asio::error::operation\u中止错误 但处理程序实际上并不是立即/同步调用的,而是在控制返回io_服务时异步调用的。如果连接实际成功,并且我的处理程序回调已发布到io_服务,那么在调用关闭后,我的连接处理程序仍可能被调用而没有错误代码吗?操作将立即取消,但处理

根据boostasio文档,如果我在一个异步连接操作挂起的套接字上调用close,处理程序将被“立即”调用,并显示错误代码。从文件中:

此功能用于关闭插座。任何异步发送、接收或连接操作都将立即取消,并将完成boost::asio::error::operation\u中止错误


但处理程序实际上并不是立即/同步调用的,而是在控制返回io_服务时异步调用的。如果连接实际成功,并且我的处理程序回调已发布到io_服务,那么在调用关闭后,我的连接处理程序仍可能被调用而没有错误代码吗?

操作将立即取消,但处理程序不会被同步调用。如果在调用
close()
时队列中已经有一个“正常”的完成处理程序,那么它肯定会被调用,并且您不会得到“操作被中止”。

文档声明将立即取消未完成的操作,而不是立即调用这些操作


连接操作可能已经完成,处理程序在
io\u服务中排队等待延迟调用,其
error\u code
boost::system::errc::success
。可以考虑检查插座是否在完成处理程序中,如回答中所做的。有关此行为的更多详细信息,请参阅答案。

谢谢您的回答。那么,您是否同意文件在这方面并非严格正确?“任何异步发送、接收或连接操作都将立即取消,并将伴随boost::asio::error::operation\u aborted error”的说法不一定正确。文档完全正确。异步操作的生命周期在其完成时结束;它不是由完成处理程序的发布或调用决定的。调用
cancel()
时,所有异步操作都将被取消,它们的处理程序将被设置为延迟调用,错误设置为
boost::asio::error::operation\u aborted error
;我同意,仔细阅读后,措辞并不含糊。