gpt4 book ai didi

c++ - 安全地完成读取操作 (Boost.Asio)

转载 作者:行者123 更新时间:2023-11-28 02:21:06 25 4
gpt4 key购买 nike

通过完成读取操作,我的意思是使 socket::read_some 返回或调用传递给 socket::async_read_some 的处理程序。请注意,我在套接字的接收方,是我发起了读取操作。我想要完成的是主动关闭套接字连接。连接也可能被被动关闭,这由带有 boost::asio::error::eof 的读取操作指示。

我试过 socket::shutdown() 然后调用 socket::close() 如下:

boost::system::error_code err;
if (psocket->is_open()) {
psocket->shutdown(tcp::socket::shutdown_both, err);
psocket->close(err);
}

这种方法的问题在于,如果在调用 is_open() 返回 true 后连接被被动关闭,那么在某些操作系统(如 Mac OS X)上,以下对 close() 的调用将通过访问已经为空的指针导致段错误。另一方面,单次调用 shutdown() 根本不会使读取操作完成。那么,如何主动安全地完成读操作呢?

最佳答案

您不能强制异步操作​​完成状态。但是你可以通过调用psocket->cancel()取消对socket的所有操作。这将使用 boost::asio::error::operation_aborted 错误代码调用您的所有处理程序。

关于c++ - 安全地完成读取操作 (Boost.Asio),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32432200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com