【发布时间】:2017-09-18 04:15:26
【问题描述】:
我正在尝试使用boost::asio::ip::tcp::socket的成员函数async_read_some从HTTP服务器异步读取数据
template<
typename MutableBufferSequence,
typename ReadHandler>
void-or-deduced async_read_some(
const MutableBufferSequence & buffers,
ReadHandler handler);
我想知道一种方法如何向服务器发出应用程序客户端发生错误的信号,以便服务器停止尝试将其余数据发送到客户端。
例如,假设我需要 10 个递归 async_read_some 函数调用来接收来自服务器的完整答案。当第 4 个async_read_some 调用其handler 函数时,我无法在此handler 函数中解析接收到的数据,因为引发了某种异常。现在我想通知服务器发生了错误,我不想收到其余的消息。但是当我在这个 handler 函数中时,我应该怎么做呢?
我可以使用ip::tcp::socket::shutdown_type::shutdown_receive 参数调用ip::tcp::socket::shutdown,但我不能使用相同的连接进行未来的通信。
我也不能调用 ip::tcp::socket 的 cancel 成员函数来取消正在进行的异步操作,因为此时实际上并没有在该套接字上处理任何异步操作 - 只有异步操作的回调函数正在处理。
如果我不想关闭此连接,我应该如何正确处理这种情况?
【问题讨论】:
-
也许我应该在发生错误时关闭套接字,然后在幕后创建一个新的
标签: c++ sockets asynchronous tcp boost-asio