gpt4 book ai didi

c++ - 当流关闭时,boost::asio::async_read 的 ReadHandler 应该返回什么 error_code?

转载 作者:行者123 更新时间:2023-11-28 05:00:46 25 4
gpt4 key购买 nike

我正在尝试为任意流(具有读取和写入接口(interface))实现以下内容。

http://www.boost.org/doc/libs/1_39_0/doc/html/boost_asio/reference/AsyncReadStream.html

我打算做的是将流传递给某个客户端。客户端 async_writes 到流,当没有更多数据时,它会关闭流。

调用代码从流中异步读取,直到我假设它通过 ReadHandler error_code 获得流关闭状态的一些指示。我的问题是:

  1. error_code 是什么?

  2. 我能保证使用这种机制传输所有数据吗?

  3. 有更好的方法吗?

最佳答案

底线是:这取决于实现。如果您想抽象出该接口(interface),我建议您抽象出您自己的接口(interface)背后的实现细节。

如果您/想要/公开 Asio 接口(interface)(为什么?),那么您可以创建一个组合的 IO 操作,将所有预期的错误转换为一个公共(public)契约。


对于具体的实现,一个简单的测试当然就足够了。

对于套接字,通常的错误代码是eof (boost::asio::error::misc_errors::eof)。根据情况 boost::asio::error::basic_errors::connection_resetboost::asio::error::basic_errors::network_reset 可能发生。

如果 io_service 停止,服务对象被破坏或套接字关闭,boost::asio::error::basic_errors::operation_abortedboost::asio::error::basic_errors::bad_descriptor 可以预期。

当然,所有这些都依赖于实现。不同的平台可能有不同的代码,不同的流可能有不同的代码。

错误条件

您可以尝试确保错误条件映射到同一“事物”而不是错误代码,这样客户端将具有一致的界面。

关于c++ - 当流关闭时,boost::asio::async_read 的 ReadHandler 应该返回什么 error_code?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46079340/

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