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

Which Boost error codes/conditions are returned by which Boost.Asio calls?

本文关键字:Boost 错误代码 条件 返回 Asio 调用 哪些      更新时间:2023-10-16

我目前正在编写一个使用Boost.Asio作为底层套接字API的TCP I/O工具,我注意到Boost.Acio似乎缺乏关于每个单独操作(例如函数/方法调用或异步操作(可能导致特定Boost错误代码/条件的文档。我所能找到的只是错误代码API和一些非正式的错误代码列表,它们都没有将特定代码与特定操作关联起来

这种明显缺乏文档的情况令人沮丧,因为当你不知道可能的故障模式时,很难编写健壮的代码。甚至不可能给出例子,因为由于缺乏文件,我甚至不确定哪些操作可能会产生哪些问题。

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

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

通常,当Boost.Asio依赖于操作系统实现时,它既不会指定可能发生错误的条件,也不会指定可能返回的错误代码。在出现故障时,如果应用程序能够接收到boost::system::error_code,Boost.Asio将填充它,例如用于异步操作或带有error_code参数的同步操作过载;否则将抛出包含CCD_ 3的异常。文件说明如下:

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

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

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