error-handling - 如何映射Windows系统错误代码以增强::error_condition?

标签 error-handling cross-platform boost-asio

在下面的代码中,我想用通用的boost系统错误代码替换Windows WinSock错误WSAEINTR = 10004,但是我如何用通用枚举映射在调试器中找到的代码?

timeout_.expires_from_now(posix_time::seconds(15));
timeout_.async_wait( boost::bind(&cancel_socket_fn,this,_1) );
asio::streambuf rd_buf;
unsigned length = read_until( socket_, rd_buf,delimiter_string, error );
timeout_.cancel();

if(error) 
{
    // how do I make this portable?
    if(error.value()==WSAEINTR) throw request_timeout_exception()
    else throw my_asio_exception(error,"Unable to read header");
}

...
cancel_socket_fn(system::error_code e) { socket_.cancel(); }

最佳答案

如果(错误== boost::asio::error::interrupted)...

我认为这是一个设计错误,因为如果从调用io_service::run()(或类似函数)的线程中调用此代码,则在read_until()完成之前将不会调用cancel_socket_fn()。或者,如果它们位于不同的线程中,则这是同步问题,因为计时器方法不是线程安全的。

关于error-handling - 如何映射Windows系统错误代码以增强::error_condition?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6909702/

相关文章:

vba - 如果我的vba遇到错误,如何进行下一个步骤?

error-handling - 我该如何解决语法错误,应该是 “;”但在Pascal中却发现 “ELSE”错误?

c++ - 无法使用包装不同下一层的两个 ssl_stream 编译代码

vbscript - VB脚本集语句

php - wamp服务器的图标没有变成绿色

c++ - 如何在 C++ 应用程序中播放来自 Youtube 的 FLV 文件?

c++ - 帮助跨平台脚本 - #IF defined()

c++ - OpenSSL 使用 Cmake 从源代码编译?

c++ - 为什么这个例子使用 ASIO async_receive_from 而不是 "leaky"

c++ - 使用 Boost.Asio 进行混合 tcp::iostream 和套接字操作