Boost.Asio调用哪些Boost错误代码/条件?

时间:2015-07-27 17:29:56

标签: c++ sockets boost boost-asio boost-system

我目前正在编写一个使用Boost.Asio作为底层套接字API的TCP I / O工具,并且我注意到 Boost.Asio似乎缺少哪些特定Boost错误代码/条件的文档可以由每个单独的操作(例如函数/方法调用或异步操作)产生。我能找到的所有内容都是错误代码API和一些非正式的错误代码列表,没有一项将特定代码与特定操作相关联

这种明显缺乏文档令人沮丧,因为当您不了解可能的故障模式时,编写健壮的代码很困难。甚至不可能举例,因为我甚至不确定哪些操作可能因缺乏文档而导致哪些操作。

相比之下,POSIX套接字API在记录故障模式方面非常不错。特别是,它列出了每个函数调用可以生成的errno和返回值。

这个Boost.Asio文档是否存在于某处,我只是没有看到它?或者我应该猜测,反向工程或收集Boost.Asio API各个部分的故障模式的经验数据,以便能够编写使用它的健壮代码?

1 个答案:

答案 0 :(得分:2)

通常,当Boost.Asio依赖于OS实现时,它既不会指定可能发生错误的条件,也不会指定可能返回的错误代码。失败时Boost.Asio将填充boost::system::error_code如果应用程序能够接收它,例如异步操作或具有error_code参数的同步操作重载;否则会抛出包含error_code的异常。 documentation声明如下:

  

除非另有说明,否则定义异步操作的行为"好像"通过POSIX函数实现,将使用类型error_code的值调用处理程序,该值对应于POSIX针对该函数描述的失败条件(如果有)。否则,将使用反映操作系统错误的实现定义的error_code值调用处理程序。

     

异步操作不会因指示信号中断的错误条件(POSIX EINTR)而失败。异步操作不会因与非阻塞操作(POSIX EWOULDBLOCKEAGAINEINPROGRESS; Windows WSAEWOULDBLOCKWSAEINPROGRESS)相关的任何错误情况而失败。< / p>

如果错误处理取决于确切的错误代码,那么通常可以使用BSD API mapping documentation来确定正在进行的OS调用。然后,可以使用适当的OS文档来确定发生错误的条件和值。错误代码和Boost.Asio错误代码之间的映射位于asio/error.hpp内,但映射通常非常简单。