其他分享
首页 > 其他分享> > c – Boost.Asio调用哪些Boost错误代码/条件?

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

作者:互联网

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

这种明显缺乏文档令人沮丧,因为当您不知道可能的故障模式时,很难编写健壮的代码.甚至不可能给出例子,因为我甚至不相信由于缺乏文档而可能由哪些操作引起的问题.

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

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

解决方法:

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

Unless otherwise noted, when the behaviour of an asynchronous operation is defined “as if” implemented by a POSIX function, the handler will be invoked with a value of type error_code that corresponds to the failure condition described by POSIX for that function, if any. Otherwise the handler will be invoked with an implementation-defined error_code value that reflects the operating system error.

Asynchronous operations will not fail with an error condition that indicates interruption by a signal (POSIX EINTR). Asynchronous operations will not fail with any error condition associated with non-blocking operations (POSIX EWOULDBLOCK, EAGAIN or EINPROGRESS; Windows WSAEWOULDBLOCK or WSAEINPROGRESS).

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

标签:c,sockets,boost,boost-asio,boost-system
来源: https://codeday.me/bug/20191009/1875659.html