标签: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各个部分的故障模式的经验数据,以便能够编写使用它的健壮代码?
解决方法:
通常,当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-definederror_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 (POSIXEWOULDBLOCK
,EAGAIN
orEINPROGRESS
; WindowsWSAEWOULDBLOCK
orWSAEINPROGRESS
).
如果错误处理取决于确切的错误代码,那么通常可以使用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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。